我最近开始在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设置我可以使用它来获得与常规浏览器相同的网页?
答案 0 :(得分:0)
我在代码块中没有看到任何问题。我已经采用了您的代码块并执行了相同的perl -pe 's/:/||o||/ for ($_) x 7' 1.txt
捕获默认和最大化模式下的快照,这是带有{{1的屏幕截图的结果} Test
。
当我们在默认配置中发起 URL
时,由于http://www.google.com
无头(没有显示任何内容),viewportSize {object}
property有效地模拟了窗口的大小传统浏览器。因此,加载的初始页面的大小为 portrait ,大小如下:
最小代码:
PhantomJS
快照:
但是,当我们在默认配置中启动 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
从以上两张图片可以清楚地看出, 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
中显示大部分页面元素,您必须最大化浏览器。