python 3 - selenium - 打印从网页上删除的文本元素

时间:2016-08-16 09:46:55

标签: python selenium web-scraping

阅读J. Kazil的“使用Python进行数据争夺”我在这个关于使用Selenium进行屏幕阅读的例子。代码(遵循作者给出的代码)是这样的:

    # sele.py

    1 import time  
    2 from selenium import webdriver

    8 browser = webdriver.Firefox()  
    9 browser.get('http://www.fairphone.com/we-are-fairphone/')

   11 iframe = browser.find_element_by_xpath("//iframe[@id='twine-iframe-none']")  
   12 new_url = iframe.get_attribute('src')    
   13 browser.get(new_url)   
   14 time.sleep(4)  
   15   
   16 all_bubbles = browser.find_elements_by_css_selector('div.content')  
   17 for elem in all_bubbles:  
   18     print(elem.text)

我改变了一些书的代码:
第11行:“Data Wrangling”作者的原始代码仅使用// iframe作为xpath表达式,导致空白页面
第14行:我在这里添加了超时,因为没有超时,所有发生的事情都是命令行光标的返回 第18行:原始代码适用于Python 2,但到目前为止,将示例更改为Python 3已经奏效了(我现在是第320页)

接下来会打开一个新的浏览器窗口,加载fairphone的主页,然后切换到iframe部分。这一切都很好。接下来的一点是打印出“气泡”内容,然而这种内容却不会发生。相反,我收集了一个相当详细的错误消息:

Traceback (most recent call last):  
  File "sele.py", line 16, in module all_bubbles = browser.find_elements_by_css_selector('div.content')    
File ".../virtEnv/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 449, in find_elements_by_css_selector  
    return self.find_elements(by=By.CSS_SELECTOR, value=css_selector)  
  File ".../virtEnv/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 778, in find_elements  
    'value': value})['value']  
  File ".../virtEnv/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 236, in execute   
    self.error_handler.check_response(response)  
  File ".../virtEnv/lib/python3.5/site-packages/selenium/webdriver/remote/errorhandler.py", line 192, in check_response  
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Permission denied to access property "handleEvent"  
Stacktrace:  
    at <anonymous> (http://apps-cdn.twinesocial.com/js-min/files/player%252Fbugsnag.js+player%252Fjquery-1.11.1.min.js+player%252Fjquery-easing-1.3.js+player%252Fjquery.timeago.js+player%252Fbootstrap-3.1.1.min.js+player%252Fisotope.pkgd.min.js+player%252Fjquery.lazy.min.js+player%252FjMinEmoji-SVG.min.js+player%252Ftheme-base.js+player%252Ftheme-base-utility.js+player%252Ftheme-base-toolbar.js+player%252Ftheme-base-fx.js+player%252Ftheme-base-manage.js+player%252FisInViewport.min.js+player%252FAnimOnScroll.js+player%252Fmodernizr.custom.js+player%252Fselect2.min.js+player%252Fhandlebars.min.js+player%252Ftheme%252Fclassic/v/2.9/t/1471301242.js:2)

我在虚拟环境中使用Python 3.5(操作系统是Ubuntu 16)。我完全被困在这里,像Read the Docs这样的文件只有助于推进我现在所处的部分。 我知道有很酷的东西,比如BeautifulSoup或Scrapy,但我现在想用Selenium做这件事。

修改 Another question被确定为可能的副本。 这个问题是在Bugsnag和Perl的背景下进行的。不过我通过添加

尝试了那里提到的解决方法
15 active_element = browser.switch_to_active_element()

并改变

16 all_bubbles = active_element.find_elements_by_css_selector('div.content')

产生了相同的错误消息。我注意到错误消息的最后部分确实有嵌套在最后一行中的bugsnag。因为我没有使用bugsnag,所以我不确定这与我的设置有什么关系。但是,提一下我使用Firefox 48和Selenium 2.53.6

可能会有所帮助

2 个答案:

答案 0 :(得分:0)

switch_to_active_element()已被弃用。

所以,它应该是:

 active_element = browser.switch_to.active_element

您可以参考this

答案 1 :(得分:0)

使用

时,我遇到了完全相同的错误
  • 硒3.141.0
  • Firefox 52.9.0
  • Raspbian / Debian 9

以上browser.switch_to.active_element对我不起作用,并引发异常:

  File "/home/pi/.pyenv/versions/venv37/lib/python3.7/site-packages/myproject/uploader.py", line 102, in login
    element = self.driver.switch_to.active_element
  File "/home/pi/.pyenv/versions/venv37/lib/python3.7/site-packages/selenium/webdriver/remote/switch_to.py", line 44, in active_element
    return self._driver.execute(Command.GET_ACTIVE_ELEMENT)['value']
  File "/home/pi/.pyenv/versions/venv37/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/home/pi/.pyenv/versions/venv37/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Permission denied to access property "handleEvent"

感谢bugsnag-js的提示,我认为应该在硒本身中解决此问题,因此我尝试将其升级到 4.0.0a3 并解决了问题!版本3.141.0是最新的稳定版本,但已于2018年11月1日发布(此时已两岁了)。所以这是我的解决方案:

pip install selenium==4.0.0a3
相关问题