【问题标题】:How to check for webpages' popups?如何检查网页的弹出窗口?
【发布时间】:2014-08-04 02:06:11
【问题描述】:

如果我在 python 中编写一个程序,允许automatically browse a given website 使用mechanize 来检测是否有使用 Python 的弹出窗口(建议广告或下载操作......),是否有可能?我会很感激任何提示(例如,如果你给我一个可以完成这项任务的库,我会很高兴)

【问题讨论】:

    标签: python firefox popup mechanize webpage


    【解决方案1】:

    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()
    

    另见:

    【讨论】:

    • selenium API 是否能够在切换到它时关闭弹出窗口?我的目标是检测给定网页上的弹出窗口并自动关闭它们。
    • @begueradj 是的,你可以switch_to_alert()accept()dismiss() 它,请参阅此线程以获取更多信息:stackoverflow.com/questions/8631500/…
    • 这正是我想要的。简单高效。谢谢你。我想奖励你 100 分,但它说我必须等待 22 小时才能做到。
    • @begueradj 很高兴它有帮助。我也会给你举个例子。
    • @begueradj 你已经做了很多其他人不会做的事情,你表现出了你的关心——这对我来说真的足够了,我很感激。你是一个很好的提问者,你应该得到你的分数。此外,对我来说,这不是积分,而是帮助人们和解决有趣的问题;积分和徽章只是奖金。谢谢,不用担心赏金。
    【解决方案2】:

    不幸的是,Mechanize 的浏览器似乎跳过了弹出窗口,因此弹出窗口和普通页面的标题、URL 和 HTML 相同。

    坦率地说,Python 不是这项工作的正确工具,恕我直言,在这方面落后了。花了几个月的时间进行网络爬虫,对于广泛使用Javascript 的网站(现在的数量正在大大增加),我发现使用Javascript-Based 环境,如PhantomJSSlimerJS 更适合你试图做。

    如果您有幸使用Javascript-Based 环境,我会说继续。但是,您仍然可以使用 python。 PhantomJS 嵌入 Ghost Driver。您可以使用Ghost.py 来利用PhantomJS 的力量。或者您可以使用SeleniumPython,如图所示here

    【讨论】:

    • 感谢您提供的所有链接。我一直在(快速)浏览 PhantomJS 以查看是否处理弹出窗口,但目前我没有找到。无论我使用什么第三方技术,它都必须与 Python 交互,因为我的主程序是用 Python 完成的。
    • 您可以在我的回答末尾查看Ghost.py
    • 是的,我看到了你给我的所有链接,现在我只是在寻找 PhantomJS 发现弹出窗口的可能性,然后我可以从 Python 程序中调用
    • 也许this 会让你尝尝鲜。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 2015-12-11
    相关资源
    最近更新 更多