【问题标题】:Why does HTML source from Selenium look different than that shown in a web browser’s view?为什么 Selenium 中的 HTML 源代码看起来与 Web 浏览器视图中显示的不同?
【发布时间】:2019-09-10 20:46:56
【问题描述】:

我正在使用 Python 和 Selenium 来捕获网页的 HTML 源代码,因此我可以对其进行解析以找到特定元素。然而,来源与我在使用浏览器的“检查元素”视图时得到的不同。我正在寻找的元素不在 Selenium 提供的源代码中。有没有办法使用 Selenium 或使用其他工具或方法获得相同的源?

【问题讨论】:

  • 在真实网页中,JavaScript 可以修改 DOM,使其与原始 HTML 源不同。

标签: python selenium web-scraping


【解决方案1】:

正如 selenium Documentation 中描述的那样:

getPageSource
java.lang.String getPageSource()

获取最后加载页面的来源。如果页面在加载后被修改(例如,通过 Javascript),则不能保证返回的文本就是修改后的页面。请查阅正在使用的特定驱动程序的文档,以确定返回的文本是反映页面的当前状态还是 Web 服务器上次发送的文本。返回的页面源是底层 DOM 的表示:不要期望它以与 Web 服务器发送的响应相同的方式进行格式化或转义。把它想象成艺术家的印象。

返回: 当前页面的来源

【讨论】:

    【解决方案2】:

    您必须下载生成此动态内容的网络浏览器的驱动程序。可能在这里http://chromedriver.chromium.org/downloads

    来自http://chromedriver.chromium.org/getting-started

    import time
    from selenium import webdriver
    
    driver = webdriver.Chrome('/path/to/chromedriver')  # Optional argument, if not specified will search path.
    driver.get('http://www.google.com/xhtml');
    time.sleep(5) # Let the user actually see something!
    search_box = driver.find_element_by_name('q')
    search_box.send_keys('ChromeDriver')
    search_box.submit()
    time.sleep(5) # Let the user actually see something!
    driver.quit()
    

    这将弹出一个 Chrome 窗口,工作并获取内容。之后不要忘记关闭它并设置 time.sleep() 以便驱动程序有一些时间来生成内容。您也可以运行它headless,然后在虚拟窗口中运行它并可以设置 f.e.窗口宽高 4000px,普通模式不允许

    【讨论】:

    • 这与提出的问题有什么关系?
    • @CoreyGoldberg 在源代码中看不到,因为它是动态内容,因此您必须先生成内容才能看到它?
    • 您是否阅读了您提供的答案?这只是入门说明。
    • @CoreyGoldberg 不,我用脚和眼罩打字。几周前我有同样的问题,这样的答案帮助我解决了我的问题。一旦我第一次尝试帮助与我有同样问题的人,一些自私的实体会从上到下批评任何寻求帮助的尝试?我认为 StackOverflow 的年度报告中存在这种不受欢迎的行为
    • StackOverflow 用于提出特定的编程问题并回答所问的问题。你的回答并没有回答任何问题。这只是事实。你应该简单地改进或删除你的答案,而不是发泄它让你感到多么受欢迎。
    猜你喜欢
    • 2013-10-24
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多