【发布时间】:2016-08-16 09:46:55
【问题描述】:
阅读 J. Kazil 的“Data Wrangling with 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。但是,提及我使用 Firefox 48 和 Selenium 2.53.6 可能会有所帮助
【问题讨论】:
标签: python selenium web-scraping