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

时间:2018-01-07 16:55:48

标签: python selenium web-scraping phantomjs

我最近开始在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设置我可以使用它来获得与常规浏览器相同的网页?

1 个答案:

答案 0 :(得分:0)

我在代码块中没有看到任何问题。我已经采用了您的代码块并执行了相同的perl -pe 's/:/||o||/ for ($_) x 7' 1.txt 捕获默认最大化模式下的快照,这是带有{{1的屏幕截图的结果} Test

PhantomJS(默认Viewport):

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

  • 最小代码:

    PhantomJS
  • 快照:

PhantomJS_normal

PhantomJS(最大化Viewport):

但是,当我们在默认配置中启动 PhantomJS ,然后同时调用 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() 方法时,viewportSize会有效地模拟大小整个屏幕如下:   - 最小代码:

PhantomJS
  • 快照:

PhantomJS_maximize

结论

从以上两张图片可以清楚地看出, maximize_window() 浏览器的默认启动次数较少Viewport,而如果我们调用 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() } {/ strong> Viewport被放大了。因此,我们可以与更多元素互动。因此,要在Viewport中显示大部分页面元素,您必须最大化浏览器。