python 爬虫日志(12) selenium+chromeheadless

最近正在写一个爬取淘宝所有店铺信息的爬虫,由于淘宝的网页内容基本都是动态加载的,所以用BeautifulSoup+requests的方法就难以应付了,因为request得到的只是网页的源代码,和开发者工具中看到的不一样,很多数据都是后来再加载的,所以有时我们需要分析ajax请求来获得数据,但这样有时太过麻烦,不过我们还有另一个神器selenium。这是一个自动化测试工具,有了它,就可以用代码让程序模拟执行人在浏览器上的所有操作,让数据动态加载,加载后的完整代码就都能够获取,和我们在开发者工具中看到的一样,这样就不用担心网页动态加载的问题了。

关于selenium的下载就不多说网上很多资料,selenium总是要配合第三方浏览器使用的,以前selenium一直和phantomjs是好伙伴,但现在据说已经分道扬镳了,谷歌也推出了chromeheadless无界面浏览器,完全可以取代phantomjs。这里附上selenium文档,为了让selenium驱动谷歌浏览器,我们还需要一个chromedriver,这个也请大家到网上下载,不过一定注意要与chrome的版本对应,不然可能会产生一些问题。

# selenium
from selenium import webdriver 引入驱动器

browser = webdriver.Chrome()  # 创立一个chrome浏览器对象
browser.get('http://www.baidu.com')  # 请求网页,运行到此的三行代码,就可以发现程序自动打开了一个浏览器

#如果是运行无界面版的chrome则
option = webdriver.ChromeOption()
option.add_argument('headless')
browser = webdriver.Chrome(chrome_options=option)
browser.get('http://www.baidu.com')  # 将上面的代码这样写,就发现没有浏览器打开了,此时是无界面形式

#最常用的方法是寻找元素的函数,如find_element_by_class_name(),find_elements_by_class_name(),前一种返回第一个找到的webelement对象,后一种返回一个列表包含所有的对象,另外还可以通过id,css_selector,xpath,tag_name等多种方法来定位元素

#若要浏览器执行js代码,则将命令写到一个字符串中,则调用excute_script()方法就可以执行js命令,如将页面移到底部
js = "window.scrollTo(0,document.body.scrollHeight)"
browser.execute_script(js)

#对于可点击的元素可以用
element.click()来点击
#对于输入框元素可以用
element.send_keys('输入的内容') #来输入内容

 关于selenium的更多用法,可以去查询文档,我也会在后面的使用中,将新的用法记录在博客中。

猜你喜欢

转载自blog.csdn.net/weixin_41506373/article/details/81666876