【发布时间】:2014-08-04 02:06:11
【问题描述】:
如果我在 python 中编写一个程序,允许automatically browse a given website 使用mechanize 来检测是否有使用 Python 的弹出窗口(建议广告或下载操作......),是否有可能?我会很感激任何提示(例如,如果你给我一个可以完成这项任务的库,我会很高兴)
【问题讨论】:
标签: python firefox popup mechanize webpage
如果我在 python 中编写一个程序,允许automatically browse a given website 使用mechanize 来检测是否有使用 Python 的弹出窗口(建议广告或下载操作......),是否有可能?我会很感激任何提示(例如,如果你给我一个可以完成这项任务的库,我会很高兴)
【问题讨论】:
标签: python firefox popup mechanize webpage
Mechanize 无法处理 javascript 和弹出窗口:
要实现目标,您需要使用真正的浏览器,headless 或不使用。这就是selenium 可以提供帮助的地方。它有一个built-in support for popup dialogs:
Selenium WebDriver 内置支持处理弹出对话框 盒子。在您触发和操作会打开一个弹出窗口后,您 可以通过以下方式访问警报:
alert = driver.switch_to_alert()
示例(使用此jsfiddle):
from selenium import webdriver
url = "http://fiddle.jshell.net/ebkXh/show/"
driver = webdriver.Firefox()
driver.get(url)
button = driver.find_element_by_xpath('//button[@type="submit"]')
# dismiss
button.click()
driver.switch_to.alert.dismiss()
# accept
button.click()
driver.switch_to.alert.accept()
另见:
【讨论】:
switch_to_alert() 和accept() 或dismiss() 它,请参阅此线程以获取更多信息:stackoverflow.com/questions/8631500/…。
不幸的是,Mechanize 的浏览器似乎跳过了弹出窗口,因此弹出窗口和普通页面的标题、URL 和 HTML 相同。
坦率地说,Python 不是这项工作的正确工具,恕我直言,在这方面落后了。花了几个月的时间进行网络爬虫,对于广泛使用Javascript 的网站(现在的数量正在大大增加),我发现使用Javascript-Based 环境,如PhantomJS 或SlimerJS 更适合你试图做。
如果您有幸使用Javascript-Based 环境,我会说继续。但是,您仍然可以使用 python。 PhantomJS 嵌入 Ghost Driver。您可以使用Ghost.py 来利用PhantomJS 的力量。或者您可以使用Selenium 和Python,如图所示here。
【讨论】:
Ghost.py。