使用
# 使用:
-安装模块:pip3 install selenium
-下载浏览器驱动:selenium操作浏览器,需要有浏览器(谷歌浏览器),谷歌浏览器驱动
-https://registry.npmmirror.com/binary.html?path=chromedriver/
-浏览器版本对应的驱动
106.0.5249.119 找到相应的驱动
-写代码测试
from selenium import webdriver
import time
# 驱动放到环境变量中,就不用传这个参数了
# 打开一个浏览器
bro = webdriver.Chrome(executable_path='./chromedriver.exe')
# 在地址栏输入 网站
bro.get('http://www.baidu.com')
time.sleep(3)
bro.close() # 关闭tab页
bro.quit() # 关闭浏览器
检测不到是代码控制的 ------针对的是谷歌浏览器
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--disable-blink-features=AutomationControlled") # 去掉自动化控制
放大浏览器
bro.maximize_window()
无界面浏览器
from selenium.webdriver.chrome.options import Options
# 驱动放到环境变量中,就不用传这个参数了
# 打开一个浏览器
chrome_options = Options()
# chrome_options.add_argument('window-size=1920x3000') # 指定浏览器分辨率
# chrome_options.add_argument('--disable-gpu') # 谷歌文档提到需要加上这个属性来规避bug
# chrome_options.add_argument('--hide-scrollbars') # 隐藏滚动条, 应对一些特殊页面
# chrome_options.add_argument('blink-settings=imagesEnabled=false') # 不加载图片, 提升速度
chrome_options.add_argument('--headless') # 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
# chrome_options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" # 手动指定使用的浏览器位置
bro = webdriver.Chrome(executable_path='./chromedriver.exe', options=chrome_options)
# 在地址栏输入 网站
bro.get('https://www.jd.com/')
print(bro.page_source) # 浏览器中看到的页面的内容
time.sleep(3)
bro.close() # 关闭tab页
bro.quit() # 关闭浏览器
查找标签
from selenium.webdriver.common.by import By
# 查找标签
bro.find_element(by=By.ID,value='id号')
bro.find_element(by=By.LINK_TEXT,value='a标签文本内容')
bro.find_element(by=By.PARTIAL_LINK_TEXT,value='a标签文本内容模糊匹配')
bro.find_element(by=By.CLASS_NAME,value='类名')
bro.find_element(by=By.TAG_NAME,value='标签名')
bro.find_element(by=By.NAME,value='属性name')
# -----通用的----
bro.find_element(by=By.CSS_SELECTOR,value='css选择器')
bro.find_element(by=By.XPATH,value='xpath选择器')
# 获取标签位置,大小
print(code.location)
print(code.size)
-------
print(code.tag_name)
print(code.id)
等待元素被加载
-显示等待:一般不用,需要指定等待哪个标签,如果标签很多,每个都要设置比较麻烦
-隐士等待:
bro.implicitly_wait(10)
find找标签的时候,如果找不到,等最多10s钟
元素操作
# 点击
标签.click()
# input写文字
标签.send_keys('文字')
#input清空文字
标签.clear()
浏览器后退
bro.back()
# 前进一下
bro.forward()
#获取cookie
cookie = bro.get_cookies()
登录cookie
bro.add_cookie(item)
# 模拟键盘操作
from selenium.webdriver.common.keys import Keys
input_search.send_keys(Keys.ENTER)
selenium切换选项卡
from selenium import webdriver
import time
bro = webdriver.Chrome()
bro.get('https://www.pearvideo.com/')
bro.implicitly_wait(10)
print(bro.window_handles)
bro.execute_script('window.open()')# 开启选项卡
# 获取出所有选项卡
bro.switch_to.window(bro.window_handles[1]) # 切换到某个选项卡
bro.get('http://www.taobao.com')
#
time.sleep(2)
bro.switch_to.window(bro.window_handles[0]) # 切换到某个选项卡
bro.get('http://www.baidu.com')
time.sleep(2)
bro.close() # 关闭选项卡
bro.quit() # 关闭页面
selenium执行js
bro.execute_script('alert(document.cookie)')
execute_script在这里面直接写js代码
获取当前访问的地址 window.location
-打开新的标签
-滑动屏幕--》bro.execute_script('scrollTo(0,document.documentElement.scrollHeight)')
-获取cookie,获取定义的全局变量
获取cookies和传值
cookies = bro.get_cookies() 获取
bro.add_cookie(传的cookies)
下拉进度条
def drop_down(driver, many=1): # 浏览器对象 下拉的次数
drop_count = 0
while True:
drop_count += 1
if drop_count > many:
break
js = "return document.body.scrollHeight"
# 获取滚动条的高度
new_height = driver.execute_script(js)
for i in range(0, new_height, 350):
time.sleep(0.05)
driver.execute_script('window.scrollTo(0, %s)' % i)
time.sleep(1)
整个页面截图
bro.save_screenshot(’截图的名字‘)
xpath使用
div 选取div标签
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性
'''
/ #当前节点
// #任意路径
.
..
取文本 /text()
取属性 /@属性名
根据属性过滤 [@属性名=属性值]
class 特殊
[contains(@class,"li")]
'''
#获取文本
commit = product.find_element(By.XPATH, './div/div[4]/strong/a').text
#获取属性
img = product.find_element(By.XPATH, './div/div[1]/a/img').get_attribute('src')
动作链
# 模拟鼠标点住,拖动的效果,实现滑块认证
# 两种形式
-形式一:
actions=ActionChains(bro) #拿到动作链对象
actions.drag_and_drop(sourse,target) #把动作放到动作链中,准备串行执行
actions.perform()
-方式二:
ActionChains(bro).click_and_hold(sourse).perform()
distance=target.location['x']-sourse.location['x']
track=0
while track < distance:
ActionChains(bro).move_by_offset(xoffset=2,yoffset=0).perform()
track+=2
本文转载自: https://blog.csdn.net/xiaolisolovely/article/details/130066283
版权归原作者 淘淘桃 所有, 如有侵权,请联系我们删除。
版权归原作者 淘淘桃 所有, 如有侵权,请联系我们删除。