简介
Selenium是一个自动化测试框架,可以通过编程语言控制浏览器进行各种操作。在Python中,可以使用Selenium实现爬虫。
首先,我们需要需要安装Selenium库。可以使用pip命令安装:
pip install selenium
要使用的话我们还需要下载对应浏览器的驱动程序。Selenium支持多种浏览器,比如Chrome、Firefox等。
谷歌驱动地址:http://chromedriver.storage.googleapis.com/index.html
还有这个:Chrome for Testing availability
这个真的是给我折磨掺了,我一开始发现我谷歌浏览器版本太高了,然后一开始的网站没有对应的版本,然后我就整卸载了我的google然后花了好久去找了一个低版本的,因为我的谷歌一直添加了很多的插件,所以我就登录了一下我的谷歌账号来同步一下,结果谷歌自动给我更新到了最新版,我心态崩了,然后我抱着侥幸的姿态去试了一下selenium,结果发现驱动不匹配,然后我又花了好久再找到上面的第二个链接有高版本的驱动,我真的哭了┭┮﹏┭┮
这个地址最好是使用一些魔法来访问,国内好像访问不到,我不用魔法的话直接到反诈中心了。。。。
下面是一个示例代码,展示了如何使用Selenium爬取网页内容:
from selenium import webdriver
# 创建浏览器对象
driver = webdriver.Chrome("/path/to/chromedriver")
# 访问网页
driver.get("http://www.example.com")
# 打印网页标题
print(driver.title)
# 关闭浏览器
driver.quit()
上面的示例代码使用了Chrome浏览器和Chrome驱动程序。要将路径/path/to/chromedriver
修改为你自己的驱动程序路径。
通过Selenium,你可以模拟浏览器行为,比如点击按钮、填写表单等。当然,你也可以获取网页的源码,进一步解析和提取数据。
需要注意的是,Selenium是一个相对比较重量级的库,适用于对JavaScript等动态内容较多的网页进行爬取。对于静态网页,我们一般使用requests进行爬取,效率更高。
为什么使用selenium呢?
模拟浏览器功能,自动执行网页中的js代码,实现动态加载
这里大家如果报错各种奇奇怪怪的,建议使用selenium的3.3.1版本,我无论是python3.1还是3.7使用这个版本都不报错,而使用其他版本全部报错。。。。。。。。我裂开
基本使用
# (1)导入selenium
from selenium import webdriver
# (2)创建浏览器操作对象
# path是驱动文件的路径
path = 'chromedriver.exe'
browser = webdriver.Chrome(path)
# (3)访问网站
url = 'https://www.jd.com/'
browser.get(url)
# page_source获取网页源码
content = browser.page_source
print(content)
这样的话就可以获得京东的秒杀页面的代码了
Selenium的元素定位
元素定位:自动化要做的事情就是模拟鼠标和键盘来操作这些元素,例如点击和输入等。在操作这些元素之前,首先是要找到他们, WebDriver 提供很多定位元素的方法。
示例代码如下:
# (1)导入selenium
from selenium import webdriver
# (2)创建浏览器操作对象
# path是驱动文件的路径
path = 'chromedriver.exe'
browser = webdriver.Chrome(path)
# (3)访问网站
url = 'https://www.baidu.com'
browser.get(url)
# 元素定位:
# 根据id寻找到对象
button = browser.find_element_by_id('su')
print(button)
# 根据标签属性的值来获取对象
button = browser.find_element_by_name('wd')
print(button)
# 根据xpath语句来获取对象
button = browser.find_elements_by_xpath('//input[@id="su"]')
print(button)
# 根据标签名来获取对象
button = browser.find_elements_by_tag_name('input')
print(button)
# 使用bs4的语法来获取对象
button = browser.find_elements_by_css_selector('#su')
print(button)
# 获取链接,也就是a标签
button = browser.find_element_by_link_text('视频')
print(button)
Selenium的访问元素信息
# (1)导入selenium
from selenium import webdriver
# (2)创建浏览器操作对象
# path是驱动文件的路径
path = 'chromedriver.exe'
browser = webdriver.Chrome(path)
# (3)访问网站
url = 'http://www.baidu.com'
browser.get(url)
input = browser.find_element_by_id('su')
# 获取元素属性
print(input.get_attribute('class'))
# 获取标签名
print(input.tag_name)
# 获取元素文本,这个是获取<>这里的内容</>
a = browser.find_element_by_link_text('新闻')
print(a.text)
Selenium交互
直接上代码,下述的代码可以实现整个页面的互相调用。什么意思呢,就是可以直接通过程序先输入一个 ‘ 章若楠 ’ ,然后滑到最下面然后再点击下一页,然后再往下滑,然后再回到前一页,再去后一页。
# (1)导入selenium
from selenium import webdriver
import time
# 创建浏览器对象
path = 'chromedriver.exe'
browser = webdriver.Chrome(path)
# url
url = "https://www.baidu.com"
browser.get(url)
time.sleep(2)
# 获取文本框的对象
input = browser.find_element_by_id('kw')
# 在文本框中输入章若楠
input.send_keys('章若楠')
time.sleep(2)
# 获取百度一下的按钮
button = browser.find_element_by_id('su')
# 点击按钮
button.click()
time.sleep(2)
# 滑到底部
js_bottom = 'document.documentElement.scrollTop=100000'
browser.execute_script(js_bottom)
time.sleep(2)
# 获取下一页的按钮
next = browser.find_element_by_xpath('//a[@class="n"]')
# 点击下一页
next.click()
time.sleep(2)
browser.execute_script(js_bottom)
time.sleep(2)
# 回到上一页
browser.back()
time.sleep(2)
browser.execute_script(js_bottom)
time.sleep(2)
# 下一页
browser.forward()
time.sleep(3)
# 退出
browser.quit()
phantomjs
# phantomjs 的基本使用
from selenium import webdriver
import time
path = 'phantomjs.exe'
browser = webdriver.PhantomJS(path)
url = 'https://www.baidu.com'
browser.get(url)
browser.save_screenshot('baidu.png')
time.sleep(2)
input = browser.find_element_by_id('kw')
input.send_keys('李一桐')
time.sleep(2)
browser.save_screenshot('李一桐.jpg')
Chrome handless
到这里我就裂开了
需要Python3.6以上的,我现在还用的3.1,爆炸了我要┭┮﹏┭┮
......
重新从这里开始写文章已经是两天之后了,没错,我完美的预判到了重新下载python将会导致的一系列版本不兼容问题,我哭了,我累了,但是好在我搞定了┭┮﹏┭┮
配置
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
# path是你自己的Chrome浏览器的文件路径
# 这里也是我们唯一需要修改的地方
path = r'C:\Program Files\Google\Chrome\Application\chrome.exe'
chrome_options.binary_location = path
browser = webdriver.Chrome(chrome_options=chrome_options)
上面的代码除了path几乎不用修改
url = 'https://www.baidu.com'
browser.get(url)
browser.save_screenshot("baidu.png")
可以再加上这几行浅浅使用一下
可以使用方法封装一下然后调用
# 封装的handless
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
"""
封装一下
"""
def share_browser():
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
# path是你自己的Chrome浏览器的文件路径
# 这里也是我们唯一需要修改的地方
path = r'C:\Program Files\Google\Chrome\Application\chrome.exe'
chrome_options.binary_location = path
browser = webdriver.Chrome(chrome_options=chrome_options)
return browser
browser = share_browser()
url = 'https://www.jd.com'
browser.get(url)
browser.save_screenshot("jd.jpg")
总结
这一章真的不难,但是我真的很烦!!!
更新完python真的多了好多事,好多版本真的不兼容,哭了哭了┭┮﹏┭┮