概述
活动地址:CSDN21天学习挑战赛
一、Selenium框架环境搭建
Selenium是一个用于测试Web应用程序的框架О,该框架测试直接在浏览器中运行,就像真实用户操作一样。在爬虫领域selenium同样是一把利器,能够解决大部分的网页的反爬问题。Selenium可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。
1.下载安装模块 cmd 中输入pip install selenium
2.安装浏览器驱动WebDriver
Selenium库里有个叫WebDriver的API。WebDriver有点儿像可以加载网站的浏览器,但是它也可以像BeautifulSoup.或者其他Selector对象一样用来查找页面元素,与页面上的元素进行交互(发送文本、点击等),以及执行其他动作。
Chrome浏览器驱动下载地址: http://chromedriver.storage.googleapis.com/index.html
Firefox浏览器驱动下载地址: https://github.com/mozilla/geckodriver/releases/
Edge浏览器驱动下载地址: : https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/#downloads
PhantomJS安装教程(无界面浏览器,它会把网站加载到内存并执行页面上的JavaScript,因为不会展示图形界面,所以运行起来比完整的浏览器要高效) : PhantomJS浏览器下载安装、配置环境变量及使用教程
注意:需要下对应浏览器版本的驱动,下载安装步骤如下:
1.确定浏览器的版本:
2.下载对应Chrome驱动版本:
3.选择合适的操作系统:
4.安装包解压后放进Python安装路径下:
二、基础操作
1.打开浏览器
操作Chrome浏览器:
from selenium import webdriver
# 浏览器的初始化
browser = webdriver.Chrome()
# 发送请求
browser.get('https://www.baidu.com/')
# 打印页面的标题
print(browser.title)
# 退出模拟浏览器
browser.quit()
# 一定要退出!不退出会有残留进程
操作Firefox浏览器:
from selenium import webdriver
# 浏览器的初始化
browser = webdriver.Firefox()
# 发送请求
browser.get('https://www.baidu.com/')
# 打印页面的标题
print(browser.title)
# 退出模拟浏览器
browser.quit()
# 一定要退出!不退出会有残留进程
操作Edge浏览器:
from selenium import webdriver
# 浏览器的初始化
browser = webdriver.Edge()
# 发送请求
browser.get('https://www.baidu.com/')
# 打印页面的标题
print(browser.title)
# 退出模拟浏览器
browser.quit()
# 一定要退出!不退出会有残留进程
操作PhantomJS浏览器:
from selenium import webdriver
# 初始化浏览器
browser = webdriver.PhantomJS()
# 发送请求
browser.get('https://www.baidu.com/')
# 打印页面的标题
print(browser.title)
# 退出模拟浏览器
browser.quit()
# 一定要退出!不退出会有残留进程
from selenium import webdriver
# 初始化浏览器
browser = webdriver.PhantomJS()
# 发送请求
browser.get('https://www.baidu.com/')
# 打印页面的标题
print(browser.title)
# 退出模拟浏览器
browser.quit()
# 一定要退出!不退出会有残留进程
2.无界面模式
Headless模式是Chrome浏览器的无界面形态,可以在不打开浏览器的前提下,使用所有Chrome支持的特性运行我们的程序
from selenium import webdriver
# 1. 实例化配置对象
chrome_options = webdriver.ChromeOptions()
# 2. 配置对象添加开启无界面命令
chrome_options.add_argument('--headless')
# 3. 配置对象添加禁用gpu命令
chrome_options.add_argument('--disable-gpu')
# 4. 实例化带有配置对象的browser 对象
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get('https://www.baidu.com/')
# 查看请求的数据
print(browser.page_source)
# 查看渲染后的数据,就可以Xpath进行解析获取数据了
print(browser.get_cookies())
# 查看请求页面后的cookies值
print(browser.current_url)
# 查看请求url
# 关闭页面
browser.close()
# 关闭浏览器
browser.quit()
3.元素定位
定位元素的其他方法
from selenium import webdriver
from selenium.webdriver.common.by import By
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(chrome_options=chrome_options)
url = 'https://www.xxx.com/'
browser.get(url)
html_str = browser.page_source
假设访问地址某网址,返回html_str为如下内容:
<div class="panel">
<div class="panel-heading">
<h4>Hello</h4>
</div>
<div class="panel_body">
<ul class="list" id="list-1" name="element">
<li class="element">Foo</li>
<li class="element">Bar</li>
<li class="element">Jay</li>
</ul>
<ul class="list list-small" id="list-2">
<li class="element">Foo</li>
<a href="https://www.baidu.com">百度官网</a>
<li class="element">Bar</li>
</ul>
</div>
</div>
1.根据id属性值获取元素列表:
from selenium.webdriver.common.by import By
# 获取第一个元素
browser.find_element(by=By.ID, value="list-1")
# 获取多个元素
browser.find_elements(by=By.ID, value="list-1")
2.根据class获取元素列表:
# 获取第一个元素
browser.find_element(by=By.CLASS_NAME, value="element")
# 获取多个元素
browser.find_elements(by=By.CLASS_NAME, value="element")
3.根据Xpath获取元素列表:
# 返回标签为li,id为element的所有元素
browser.find_element(by=By.XPATH, value="//li[@id='element']")
browser.find_elements(by=By.XPATH, value="//li[@id='element']")
4.根据标签的文本获取元素列表(精确定位):
# 获取一个元素
browser.find_element(by=By.LINK_TEXT, value="Foo")
# 获取多个元素
browser.find_elements(by=By.LINK_TEXT, value="Foo")
5.根据标签包含的文本获取元素列表(模糊定位):
# 获取一个元素
browser.find_element(by=By.PARTIAL_LINK_TEXT, value="Fo")
# 获取多个元素
browser.find_elements(by=By.PARTIAL_LINK_TEXT, value="Fo")
6.根据标签名获取元素列表:
# 获取一个元素
browser.find_element(by=By.TAG_NAME, value="li")
# 获取多个元素
browser.find_elements(by=By.TAG_NAME, value="li")
4.元素操作
1.获取文本:element.text
ret = browser.find_element_by_class_name('element')
print(ret[0].text)
2.获取属性值:
ret = browser.find_element_by_tag_name('a')
print(ret[0].get_attribute('href'))
5.前进后退
# 前进
browser.forward()
# 后退
browser.back()
6.执行js
selenium可让浏览器执行:browser.execute_script(js)
from selenium import webdriver
browser = webdriver.Chrome()
url = 'https://www.baidu.com/'
browser.get(url)
js = 'window.scrol1To(O,document.body.scrollHeight)'
# js语句
browser.execute_script(js) # 执行js的方法
browser.quit()
7.页面等待
现在的网页越来越多采用了Ajax技术,这样程序便不能确定何时某个元素完全加载出来了。如果实际页面等待时间过长导致某个dom元素还没出来,但是你的代码直接使用了这个WebElement,那么就会抛出NullPointer的异常。
为了避免这种元素定位困难而且会提高产生ElementNotVisibleException的概率。所以Selenium提供了两种等待方式,一种是隐式等待,一种是显式等待。
隐式等待是等待特定的时间,显式等待是指定某一条件直到这个条件成立时继续执行。
隐式等待(常用)
隐式等待针对的是元素定位,隐式等待设置了一个时间,在一段时间内判断元素是否定位成功,如果完成了,就进行下一步。在设置的时间内没有定位成功,则会报超时加载
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10) # 隐式等待10秒
driver.get('https://www.baidu.com/')
myDynamicElement = driver.find_element_by_id("input")
显式等待(了解)
显式确定等待指定某个元素,然后设置最长等待时间。如果在这个时间还没有找到元素,那么便会抛出异常了。
from selenium import webdriver
from selenium.webdriver.common.by import By
# WebDriverWait 库,负责循环等待
from selenium.webdriver.support.ui import WebDriverWait
# expected_conditions 类,负责条件出发
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
try:
# 页面一直循环,直到 id="input" 出现
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "input"))
)
finally:
driver.quit()
三、进阶操作
1.使用代理ip
from selenium import webdriver
import time
# 1. 实例化配置对象
options = webdriver.ChromeOptions()
# 2. 配置对象添加使用代理ip的命令
options.add_argument('--proxy-server=http://ip地址')
# 代理IP:端口号
# 3. 实例化带有配置对象的driver对象
driver = webdriver.Chrome(chrome_options=options)
driver.get("https://www.baidu.com")
# 获取页面内容
print(driver.page_source)
# 延迟3秒后关闭当前窗口,如果是最后一个窗口则退出
time.sleep(3)
driver.close()
2.修改请求头
用于伪装不同浏览器
from selenium import webdriver
import time
agent = 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1'
# 1. 实例化配置对象
options = webdriver.ChromeOptions()
# 2. 配置对象修改请求头
options.add_argument('--user-agent=' + agent)
# 3. 实例化带有配置对象的driver对象
driver = webdriver.Chrome(chrome_options=options)
driver.get("https://www.baidu.com")
# 获取页面内容
print(driver.page_source)
# 延迟3秒后关闭当前窗口,如果是最后一个窗口则退出
time.sleep(3)
driver.close()
最后
以上就是羞涩豆芽为你收集整理的21天Python学习——selenium自动化操作浏览器一、Selenium框架环境搭建 二、基础操作的全部内容,希望文章能够帮你解决21天Python学习——selenium自动化操作浏览器一、Selenium框架环境搭建 二、基础操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复