Selenium + PhantomJS打开的网页与常规浏览器不同
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selenium + 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的设置我可以使用它来获得与常规浏览器相同的网页?
我在你的代码块中没有看到任何问题。我已经采取了你的代码块并执行了相同的Test
捕获默认和最大化模式下的快照,这里的结果与URL
http://www.google.com
截图。
PhantomJS(默认Viewport):
当我们在默认配置中启动PhantomJS
时,由于PhantomJS
无头(没有显示任何内容),viewportSize {object}
property有效地模拟了窗口的大小,就像在传统浏览器中一样。因此,加载的初始页面的纵向大小如下:
- 最小代码:
browser = webdriver.PhantomJS(executable_path=r'C:Utilityphantomjs-2.1.1-windowsinphantomjs.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:Utilityphantomjs-2.1.1-windowsinphantomjs.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
中显示大部分页面元素,您必须最大化浏览器。
以上是关于Selenium + PhantomJS打开的网页与常规浏览器不同的主要内容,如果未能解决你的问题,请参考以下文章
使用selenium和phantomJS浏览器获取网页内容的小演示
python+selenium+PhantomJS爬取网页动态加载内容
9使用selenium + phantomjs 模拟浏览器登录网站