【问题标题】:Selenium + PhantomJS opens webpage different than regular browserSelenium + PhantomJS 打开的网页与普通浏览器不同
【发布时间】:2018-06-16 19:00:23
【问题描述】:

我最近开始用 Python 编写网页抓取代码。仅使用 requests 和 BeautifulSoup,我就能做很多事情。然后,当我尝试 Staples 网站时,我在 Chrome 的开发人员工具中找不到显示的元素。我做了一些研究,并认为它可能是 JavaScript。我尝试了 ghost.py 和 QtWebKit,他们有这个 SSL 问题。然后我尝试了 Selenium + PhantomJS。

executable_path = os.path.dirname(os.path.abspath(__file__)) + '\\phantomjs.exe'
browser = webdriver.PhantomJS(executable_path=executable_path)
browser.get(url)
html = browser.page_source
browser.save_screenshot('./abc.png')

screenshot1 与 Chrome 中的 screenshot2 不同。 在 Chrome 中,PhantomJS 浏览器中没有显示价格块。我也试过自定义的header,没有区别。

headers = { 'Accept':'*/*',
'Accept-Encoding':'gzip, deflate, sdch',
'Accept-Language':'en-US,en;q=0.8',
'Cache-Control':'max-age=0',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, 
like Gecko) Chrome/48.0.2564.116 Safari/537.36'}

for key, value in enumerate(headers):
    capability_key = 'phantomjs.page.customHeaders.{}'.format(key)
    webdriver.DesiredCapabilities.PHANTOMJS[capability_key] = value

我想从网页上抓取价格。是否有一些 Selenium 设置可用于获取与常规浏览器相同的网页?

【问题讨论】:

    标签: python selenium web-scraping phantomjs viewport


    【解决方案1】:

    我在您的代码块中没有看到任何问题。我已经获取了您的代码块并执行了相同的Testdefaultma​​ximized 模式下捕获快照,这是带有URL 的屏幕截图的结果>http://www.google.com.


    PhantomJS(默认Viewport):

    当我们在默认配置中启动 PhantomJS 时,由于PhantomJS 是无头的(没有显示任何内容),viewportSize {object} property 有效地模拟了 传统浏览器中的窗口大小。因此加载的初始页面是portrait,大​​小如下:

    • 最小代码:

      browser = webdriver.PhantomJS(executable_path=r'C:\\Utility\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')
      browser.get("http://www.google.com")
      html = browser.page_source
      browser.save_screenshot('./Screenshots/PhantomJS_normal.png')
      browser.quit()
      
    • 快照:


    PhantomJS(最大化Viewport):

    但是当我们在默认配置中启动PhantomJS,然后同时调用maximize_window()方法时,viewportSize有效地模拟了整个屏幕的大小,如下所示: - 最小代码:

        browser = webdriver.PhantomJS(executable_path=r'C:\\Utility\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')
        browser.get("http://www.google.com")
        browser.maximize_window()
        html = browser.page_source
        browser.save_screenshot('./Screenshots/PhantomJS_maximize.png')
        browser.quit()
    
    • 快照:


    结论

    所以从上面两张图可以很明显的看出,默认启动的PhantomJS浏览器有一个较小的Viewport,而如果我们调用maximize_window() Viewport 已放大。因此,我们可以与更多元素进行交互。因此,为了让Viewport 中的大部分页面元素可见,您必须最大化浏览器。

    【讨论】:

    • 我试过了。这没有帮助。我实际上使用 bold font 来强调与 2 个屏幕截图的不同之处。请再次阅读问题并尝试此url
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 2020-08-05
    • 2017-07-14
    • 1970-01-01
    • 2019-02-09
    相关资源
    最近更新 更多