【问题标题】:Python selenium web scraping - freeze pagePython selenium 网页抓取 - 冻结页面
【发布时间】:2019-06-30 21:07:13
【问题描述】:

我正在用 selenium 刮几页,由于有很多 ajax 操作,我不使用其他框架(如 scrapy 等)。 我的问题是内容几乎每秒都会自动刷新(例如财务数据),但我想抓取静态状态的所有元素。我在互联网上搜索了很多,尤其是在 stackoverflow 上。用硒冻结网站的最简单方法是什么? 我什至尝试关闭无线适配器,但这是一个问题...... 这是我在 selenium 文档中找到的唯一命令:

driver.set_network_conditions(offline=True, latency=5, throughput=500 * 1024)

我测试了这段代码,当我运行脚本时它没有任何效果。网站仍在“自动刷新”...

【问题讨论】:

  • 你能分享你要解析的网址吗?
  • 例如这个:gatehub.net/markets/XRP/USD+rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq(本站没有API)
  • 你打算从那个页面提取什么?
  • 你需要这个吗? api.gatehub.net/rippledata/v2/exchanges/… 可以根据需要增加limit 参数(测试最大400)。

标签: javascript python selenium


【解决方案1】:

"例如这个:https://gatehub.net/markets/XRP/USD+rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq(那里 没有此站点的 API)"


事实上,api 存在,但它完全公开。

要将图表的值作为 json 对象获取,您需要构建一个自定义 URL,例如:

https://api.gatehub.net/rippledata/v2/exchanges/USD+rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq/XRP?descending=true&end=2019-02-06T21:20:00.000Z&limit=400&reduce=false&result=tesSUCCESS&start=2009-02-06T21:20:00.000Z

输出:

{"result":"success","count":400,"marker":"USD|rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq|XRP||20190206014150|000044926668|00006|00003","exchanges":[{"base_amount":"0.12180204","counter_amount":"0.42056","node_index":6,"rate":"3.4528157","tx_index":18,"autobridged_currency":"ETH","autobridged_issuer":"rcA8X3TVMST1n3CJeAdGk1RdRCHii7N2h","buyer":"rGmGFAEx1hYEJuSAfrjEBdA48AXWJBMp1D","executed_time":"2019-02-06T21:14:00Z","ledger_index":44945715,"offer_sequence":39832,"provider":"rGmGFAEx1hYEJuSAfrjEBdA48AXWJBMp1D","seller":"rUmnnszuTRfhKnULCjcKzV7mJeazCF7Gik","taker":"rUmnnszuTRfhKnULCjcKzV7mJeazCF7Gik","tx_hash":"4E39DB1CB68B4635E773082042B47168094852ED4A11C93AED7F85A67F1F7EDD","tx_type":"OfferCreate","base_currency":"USD","base_issuer":"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq","counter_currency":"XRP"},{"base_amount":"322.8872040048709","counter_amount":"1109.37944","node_index":2,"rate":"3.4358111","tx_index":18,"autobridged_currency":"ETH","autobridged_issuer":"rcA8X3TVMST1n3CJeAdGk1RdRCHii7N2h","buyer":"rETx8GBiH6fxhTcfHM9fGeyShqxozyD3xe","executed_time":"2019-02-06T21:14:00Z","ledger_index":44945715,"offer_sequence":26918939,"provider":"rETx8GBiH6fxhTcfHM9fGeyShqxozyD3xe","seller":"rUmnnszuTRfhKnULCjcKzV7mJeazCF7Gik","taker":"rUmnnszuTRfhKnULCjcKzV7mJeazCF7Gik","tx_hash":"4E39DB1CB68B4635E773082042B47168094852ED4A11C93AED7F85A67F1F7EDD","tx_type":"OfferCreate","base_currency":"USD","base_issuer":"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq","counter_currency":"XRP"}

...

注意事项:

  • 您可以更改limit参数以显示不同数量的 必要时记录(测试最多 400 条)
  • 还应自动更新日期以获取最新值。

【讨论】:

  • 感谢您的回答,这很有帮助,尽管我的问题是如何在 selenium 驱动程序会话期间停止 javascript/自动刷新整个网站/元素。
  • 尝试通过 selenium execute_script 注入 js 错误:throw new Error();
【解决方案2】:

一种解决方案可能是研究能够为您用于驱动程序的任何浏览器设置配置首选项。例如,如果使用 Firefox,您可以将 accessibility.blockautorefresh 设置为 False,然后在准备好时使用 driver.refresh()。

https://lifehacker.com/disable-automatic-web-page-refreshing-5321420

PHPUnit + Selenium: How to set Firefox about:config options?

【讨论】:

    猜你喜欢
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 2013-11-13
    相关资源
    最近更新 更多