我们之前在爬取某些网站的时候
使用到了一些 python 的请求库
模拟浏览器的请求
我们需要抓包啥的
能不能不这样
可不可以就写几行代码
让它自己去打开浏览器
自己去请求我们要爬取的网站
自己去模拟我们的一些搜索
等等
反正就是
老子躺着,让它自己动
躺好
让 selenium 满足你的要求
怎么玩呢?
那么接下里就是
学习 python 的正确姿势
什么是 selenium ?
其实它就是一个自动化测试工具,支持各种主流的浏览器
直到遇到了 python
转身一变
selenium 变成了爬虫利器
我们先来安装一下
<code>pipinstallselenium/<code>
接着我们还要下载浏览器驱动
这里用的是 Chrome 浏览器
所以下载的是 Chrome 驱动
当然你用别的浏览器也阔以
去相应的地方下载就行了
Chrome:https://sites.google.com/a/chromium.org/chromedriver/downloadsEdge:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/Firefox:https://github.com/mozilla/geckodriver/releasesSafari:https://webkit.org/blog/6900/webdriver-support-in-safari-10/
下载完之后
要配置一下环境变量
接着打开 pycharm
撸点代码
<code>from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
input= driver.find_element_by_css_selector('#kw')
input.send_keys("苍老师照片")
button = driver.find_element_by_css_selector('#su')
button.click()/<code>
运行一下
可以看到
它自己打开了 Chrome 浏览器
搜索了苍老师的照片
这就是 selenium 的魅力
我们来看下我们刚刚写的代码
我们导入了 web 驱动模块
<code>fromseleniumimportwebdriver/<code>
接着我们创建了一个 Chrome 驱动
<code>driver= webdriver.Chrome()/<code>
有了实例之后
相当于我们有了 Chrome 浏览器了
<code>driver.get("https://www.baidu.com")/<code>
我们获取到输入框
至于怎么获取
等等会讲
获取到输入框之后我们就往里面写入我们要搜索的内容
<code>input= driver.find_element_by_css_selector('#kw')
input.send_keys("苍老师照片")/<code>
输入完了之后呢
我们就获取到搜索这个按钮
然后点击
<code>button= driver.find_element_by_css_selector('#su')
button.click()/<code>
当我们使用驱动打开了一个页面
这时候其实没什么鸟用
因为我们要对那些元素进行操作
就像刚刚我们要获取输入框然后输入一些内容
还有获取按钮点击什么的
selenium 提供了挺多方法给我们获取的
当我们要在页面中获取一个元素的时候
可以使用这些方法
- find_element_by_id
- find_element_by_name
- find_element_by_xpath
- find_element_by_link_text
- find_element_by_partial_link_text
- find_element_by_tag_name
- find_element_by_class_name
- find_element_by_css_selector
想要在页面获取多个元素呢
就可以这样
- find_elements_by_name
- find_elements_by_xpath
- find_elements_by_link_text
- find_elements_by_partial_link_text
- find_elements_by_tag_name
- find_elements_by_class_name
- find_elements_by_css_selector
比如我们打开了一个页面
是这样的 HTML
<code>
/<code>
可以通过 id 获取 form 表单
<code>login_form= driver.find_element_by_id('loginForm')/<code>
通过 name 获取相应的输入框
<code>username= driver.find_element_by_name('username')
password= driver.find_element_by_name('password')/<code>
通过 xpath 获取表单
<code>login_form= driver.find_element_by_xpath("/html/body/form[1]")
login_form= driver.find_element_by_xpath("//form[1]")
login_form= driver.find_element_by_xpath("//form[@id='loginForm']")/<code>
通过标签获取相应的输入框
<code>input1= driver.find_element_by_tag_name('input')/<code>
通过 class 获取相应的元素
<code>login= driver.find_element_by_class_name('login')/<code>
用 Chrome 浏览器的审核元素
可以很方便获取相应的属性
直接 copy 就完事了
如果你觉得
find_element_by_xxx_xxx
太长了
那么你还可以这样
<code>driver.find_elements(By.ID,'xxx')/<code>
By.属性和上面的是一样的
<code>ID="id"
XPATH="xpath"
LINK_TEXT="link text"
PARTIAL_LINK_TEXT="partial link text"
NAME="name"
TAG_NAME="tag name"
CLASS_NAME="class name"
CSS_SELECTOR="css selector"/<code>
当然
我们玩的是爬虫
要的就是源代码
我们已经知道
通过
<code>driver.page_source/<code>
可以拿到浏览器对象
那么要获取源代码还不简单么?
获取请求链接
<code>input.text/<code>
获取 cookies
<code>driver.get_cookies()
/<code>
获取源代码
<code>driver.page_source/<code>
获取文本的值
<code>input.text/<code>
ok
以上就是 selenium 的常用方法
想要了解更多相关 selenium 的可以到官方文档查看
閱讀更多 程序猿架構 的文章