我最近开始在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
时,由于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
然后同时调用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
中显示大部分页面元素,您必须最大化浏览器。