Selenium + PhantomJS打开的网页与常规浏览器不同

问题描述 投票:0回答:1

我最近开始在Python中编写Web抓取代码。我只使用请求和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浏览器中没有显示。我也试过一个自定义标题,没有区别。

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
1个回答
0
投票

我在你的代码块中没有看到任何问题。我已经采取了你的代码块并执行了相同的Test捕获默认和最大化模式下的快照,这里的结果与URL http://www.google.com截图。


PhantomJS(默认Viewport):

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

  • 最小代码: 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_normal


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_maximize


结论

所以从上面的两张图片可以清楚地看出,PhantomJS浏览器的默认启动具有较小的Viewport,而如果我们调用maximize_window()Viewport被放大。因此,我们可以与更多元素互动。因此,为了在Viewport中显示大部分页面元素,您必须最大化浏览器。

© www.soinside.com 2019 - 2024. All rights reserved.