一、浏览器相关操作
(一)浏览器基本操作
- page_source() 获取当前页面源码
- close() 关闭当前窗口,如果当前窗口只有一个,那么将退出流浪器
- quit() 退出浏览器
- maximize_window() 最大化窗口
- fullscreen_window() 全屏窗口
- minimize_window() 最小化窗口
- set_window_size(width, height, windowHandle='current') 设置窗口尺寸
- get_window_size(windowHandle='current') 获取窗口尺寸,默认是当前窗口
- set_window_position(x, y, windowHandle='current')设置窗口位置,基本用不上
- back() 浏览器回退
- forward() 浏览器前进
- refresh() 浏览器刷新
- implicitly_wait() 等待元素加载
- set_page_load_timeout() 设置页面超时时间
(二)cookie相关
- get_cookies() 获取cookie列表
- get_cookie() 获取当前请求的cookie
- delete_cookie()
- delete_all_cookies()
- add_cookie()
(三)窗口相关
- current_window_handle() 获取当前窗口句柄
- window_handles() 返回所有窗口句柄,列表形式,可通过索引访问与操作
- switch_to 切换window、iframe,其他快淘汰的不列出了
switch_to.window('窗口号')
(四)截屏相关操作
get_screenshot_as_file(filename)
详细说明:
driver.get_screenshot_as_file('笔趣阁.png'),没有加绝对路径,那么就是在当前运行的文件路径下;
若存在当前路径的其他文件夹下,需要使用相对路径:driver.get_screenshot_as_file('./脚本文件/笔趣阁.png'),点号表示当前路径,后面的【脚本文件】是当前路径下的一个文件夹,【笔趣阁.png】表示文件名。通常,在使用时,我们都需要拼接路径与文件名,并与循环或者时间戳一起使用。driver.save_screenshot('笔趣阁.png')
以上内容可以查看webdriver的源代码,自己手动长沙
相关代码
from selenium import webdriver
import time
#下面没有使用
from selenium.webdriver.support import expected_conditions as EC
driver=webdriver.Chrome()
driver.get('http://www.xbiquge.la/')
#设置等待元素出现时间,这是隐含的,是一个全局变量,针对所有的元素
driver.implicitly_wait(10)
#最大化窗口
driver.maximize_window()
#设置页面超时时间
# driver.set_page_load_timeout(10)
# driver.get_screenshot_as_file('./脚本文件/笔趣阁.png')
driver.save_screenshot('笔趣阁.png')
#打印当前窗口号
win_num1=driver.current_window_handle
print(win_num1)
driver.find_element_by_id('wd').send_keys('唐家三少')
js = "window.scrollTo(0,document.body.scrollHeight)"
driver.execute_script(js)
#使用sleep只是调试代码时观察用,实际用implicitly_wait
time.sleep(3)
#使用linktext查找元素点击没有弹出新的窗口,所有又改用xpath
# driver.find_element_by_link_text('全职法师').click()
driver.find_element_by_xpath('//*[@id="firendlink"]/a[2]').click()
#打印窗口句柄
print(driver.window_handles)
window_hands=driver.window_handles
#由于窗口句柄是按序号追加进列表的,所以使用索引访问更简单
driver.switch_to.window(window_hands[1])
title=driver.find_element_by_xpath('//*[@id="info"]/h1').text
print(title)
#断言,使用python自带的assert断言最好不要用,使用selenium的expected_conditions会更佳
assert title=="全职法师"
#打印浏览器的日志信息,基本用不上
print(driver.get_log('browser'))
driver.quit()
二、八大元素定位相关操作
(一)一般的简单操作
- click点击元素
- clear清除输入框内容(只有标签是input才能使用),若无法清除,可以使用按键组合清除
- send_keys 输入字符串(也是模拟键盘操作的方法)
- text获取元素的文本内容
from selenium.webdriver.support import expected_conditions as EC
import time
driver=webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.maximize_window()
#定位到百度首页的是设置,获取文本属性(注意:这里不要用link_text,因为不是链接)
element=driver.find_element_by_xpath('//*[@id="s-usersetting-top"]').text
print(element)
#定位输入框,输入字符串
driver.find_element_by_id('kw').send_keys('天天Python ')
#定位搜索按钮,并点击
driver.find_element_by_id('su').click()
#延时看效果
time.sleep(3)
#定位文本框,清除内容
driver.find_element_by_id('kw').clear()
(二)按键操作
使用按键操作必须先导入相关模块:
from selenium.webdriver.common.keys import Keys
相关常用按键列表:
普通键 | F键 |
---|---|
BACKSPACE | F1 |
ENTER | F2 |
SHIFT | F3 |
ALT | F4 |
CONTROL | F5 |
SPACE | F6 |
TAB | F7 |
其他按键操作,可以导入之后使用ctrl加右击Keys进入,可以查看完整的按键列表
1. 单独按键操作
from selenium.webdriver.support import expected_conditions as EC
import time
from selenium.webdriver.common.keys import Keys
driver=webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.maximize_window()
#方法一:
# driver.find_element_by_id('kw').send_keys('天天Python ')
# driver.find_element_by_id('su').send_keys(Keys.ENTER)
#方法二:
driver.find_element_by_id('kw').send_keys('天天Python ',Keys.ENTER)
time.sleep(3)
driver.find_element_by_id('kw').clear()
2.常用组合按键操作
- send_keys(Keys.CONTROL,'a')全选
- send_keys(Keys.CONTROL,'c')复制
- send_keys(Keys.CONTROL,'x')剪切
- send_keys(Keys.CONTROL,'v')粘贴
按键操作用于某些网站的元素无法使用clear方法的场合
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
import time
from selenium.webdriver.common.keys import Keys
driver=webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.maximize_window()
#方法一:
# driver.find_element_by_id('kw').send_keys('天天Python ')
# driver.find_element_by_id('su').send_keys(Keys.ENTER)
#方法二:
driver.find_element_by_id('kw').send_keys('天天Python ',Keys.ENTER)
time.sleep(3)
#组合按键清除,达到clear方法的目的
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'a')
driver.find_element_by_id('kw').send_keys(Keys.BACKSPACE)
(三)鼠标操作
导入相关模块
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
import time
from selenium.webdriver.common.action_chains import ActionChains
driver=webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.maximize_window()
element=driver.find_element_by_xpath('//*[@id="s-usersetting-top"]')
#此处很关键:需要实例化ActionChains,并添加浏览器;
# move_to_element需要接收一个定位到的元素
#最后需要执行一下动作perform(),不执行就会动
#下面是鼠标悬停操作
ActionChains(driver).move_to_element(element).perform()
"""
说明:使用ActionChains需要将元素使用变量接收,或者直接将定位的元素键入上面的element位置。
其他的点击,右击等操作只要替换move_to_element即可
"""
常用鼠标操作列表:
- click() 单击左键(常用的点击操作)
- double_click() 双击
- context_click() 右击
- drag_and_drop(source, target) 起始元素位置,要到的目标元素位置
需要更多操作:请查看源代码
三、JS相关操作
关于JS的相关操作可以打开控制进行验证,可以在Python项目中加入相关代码,建议js只用于修改部分属性与获取输入框内的值
1.js在输入框输入值
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
#方法一:分开书写,顺序执行
# js_input='var js=document.querySelector("#kw");js.value="selenium"'
# js_button='document.querySelector("#su").click();'
# driver.execute_script(js_input,js_button)
#方法二:一起书写,顺序执行
#下面代码太长,使用了换行
js='var js=document.querySelector("#kw");js.value="selenium";' \
'document.querySelector("#su").click();'
driver.execute_script(js)
time.sleep(3)
js_clear='document.querySelector("#kw").value="";'
driver.execute_script(js_clear)
2.js验证输入框内的值
注意:若需要返回值(在python中能看到),需要获取value的js代码前加return
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
js='var js=document.querySelector("#kw");js.value="selenium";' \
'document.querySelector("#su").click();'
driver.execute_script(js)
#注意:若需要返回值(在python中能看到),需要加return
js2=' return document.querySelector("#kw").value'
value=driver.execute_script(js2)
print(value)
3.iframe内的js操作
import time
from selenium import webdriver
#执行js,如果有iframe,还是要先切换iframe,否则,js执行看不到结果
driver=webdriver.Chrome()
driver.get('https://www.126.com/')
driver.implicitly_wait(10)
time.sleep(3)
driver.switch_to.frame(0)
# driver.find_element_by_class_name('m-cnt').click()
#若存在很多不同的单双引号嵌套,记得加\转义
js1="document.querySelector(\"input[name='email']\")"
js2="document.querySelector(\"input[name='email']\").value='123'"
driver.execute_script(js2)
如有侵权,请联系我修改!人生很短,你我共勉,有用请点个赞!