browser.get(
"
http://www.baidu.com/
"
)
time.sleep(
5
)
browser.get(
"
https://mail.163.com/
"
)
browser.quit()
使用implicitly_wait设置最长等待时间
import time
from selenium import webdriver
browser = webdriver.Edge()
browser.implicitly_wait(10)
browser.get("http://www.baidu.com/")
time.sleep(5)
browser.quit()
browser =
webdriver.Chrome()
browser.implicitly_wait(
10
)
browser.get(
"
http://www.baidu.com/
"
)
time.sleep(
5
)
#
定位搜索框
input_text = browser.find_element(By.ID,
'
kw
'
)
#
在搜索框中输入内容
input_text.send_keys(
'
selenium
'
)
time.sleep(
5
)
browser.quit()
可以通过name属性定位:
find_element(By.NAME,'xx')
name定位,根据元素的name属性值定位,定位到的标签不一定是唯一的。
可以通过class属性定位:
find_element_by(By.CLASS_NAME,'xx')
class定位,根据元素的class属性值定位,但可能受JS影响动态变化。定位到的标签不一定是唯一的。
可以通过tag标签定位:
find_element(By.TAG_NAME,'xx')
tag name定位,根据元素的标签名定位,定位到的标签不一定是唯一的。
可以通过link定位:
link
表示包含有属性
href
的标签元素,如:
<a href="https://www.csdn.net">linktext</a>
可以通过
LINK_TEXT
进行定位。
find_element(By.LINK_TEXT,'XX')
根据链接文本全匹配进行精确定位。
find_element(By.PARTIAL_LINK_TEXT,'XX')
根据链接文本模糊匹配进行定位。
可以通过xpath定位:
xpath
是一种在XML文档中定位元素的语言
可以通过css选择器定位:
find_element(By.CSS_SELECTOR,'XX')
根据元素的css选择器来完成定位,可以准确定位任何元素,但需要熟练掌握css选择器
css
选择器
几种方式定位的区别:
定位是否唯一
返回值类型
id属性定位
element
只有标签有id属性时才能使用
name属性定位
可能不唯一
element或elements列表
只有标签有name属性时才能使用
class属性定位
可能不唯一
element或elements列表
只有标签有class属性时才能使用
tag定位
可能不唯一
element或elements列表
通常得到的都是一组列表
link_text精确定位
可能不唯一
element或elements列表
只有存在link_text相同时, 才得到列表
link_text模糊定位
可能不唯一
element或elements列表
一般用于定位<a></a>标签
xpath定位
可能不唯一
element或elements列表
一般用来做精准定位,用/表示元素层级关系,xpath属性定位值必须加引号
css选择器定位
可能不唯一
element或elements列表
一般用作精确定位,用>或空格表示元素层级关系,属性值可以不加引号
browser =
webdriver.Chrome()
browser.implicitly_wait(
10
)
browser.get(
"
http://www.baidu.com/
"
)
time.sleep(
5
)
#
定位搜索框
input_text = browser.find_element(By.ID,
'
kw
'
)
#
通过Xpath定位搜索框并输入内容查询
browser.find_element(By.XPATH,
'
//*[@id="kw"]
'
).send_keys(
'
selenium
'
)
input_text.submit()
time.sleep(
3
)
browser.quit()
获取页面内容
:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get("http://www.baidu.com/")
time.sleep(5)
title = browser.title
print(title)
source_code = browser.page_source
print(source_code)
url = browser.current_url
print(url)
text = browser.find_element(By.XPATH, '//*[@id="s-top-left"]').text
print(text)
time.sleep(3)
browser.quit()
调整浏览器尺寸大小
:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get("http://www.baidu.com/")
time.sleep(5)
browser.minimize_window()
time.sleep(2)
browser.maximize_window()
time.sleep(3)
browser.quit()
前进一页,后退一页
:
.forward()
.back()
页面刷新
:
.refresh()
窗口切换
:
current_window_handle获取当前窗口的句柄
window_handles获取所有打开页面的句柄,是一个列表
switch_to.window(“XX”)切换到指定页面,XX代表页面句柄
switch_to.frame(XX)切换到内敛框架页面,XX代表内联框架标签的定位对象
swith_to.parent_frame()切回到内敛框架的上一级,即从内敛框架切出
switch_to.alert切换到页面弹窗
下拉列表操作
:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get("file:///D:/3-项目/Projects/Practise/For_test/learning_selenium.html")
time.sleep(5)
select = Select(browser.find_element(By.TAG_NAME, 'select'))
select.select_by_value("Python")
time.sleep(2)
select.select_by_visible_text("C++")
time.sleep(2)
select.select_by_index(0)
time.sleep(2)
for i in select.options:
i.click()
time.sleep(2)
time.sleep(3)
browser.quit()
弹窗操作
:
switch_to.alert获取弹窗对象。
text弹窗内容
accept()接受弹窗
dismiss()取消弹窗
鼠标操作
:
鼠标操作需要的类:ActionChain
move_to_element(X)鼠标悬停,X代表定位到的标签
double_click(X)双击
context_click(X)右击
perform() 执行所有存储在ActionChains()类中的行为,做最终的提交
不管执行哪个方法,最后都要调用
perform()
方法,将操作呈现出来。
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select
browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get('https://www.baidu.com/')
browser.maximize_window()
time.sleep(3)
# 创建对象
action = ActionChains(browser)
action.move_by_offset(10, 50).perform()
time.sleep(2)
# 定位标签,移动鼠标
tag = browser.find_element(By.XPATH, '//*[@id="kw"]')
action.move_to_element(tag).perform()
time.sleep(2)
tag.send_keys('python')
tag2 = browser.find_element(By.XPATH, '//*[@id="su"]')
action.move_to_element(tag2).click().perform()
time.sleep(3)
browser.quit()
键盘操作
:
send_keys(Keys.BACK_SPACE)执行删除键Backspace
send_keys(Keys.CONTROL,'a')全选
send_keys(Keys.CONTROL,'x')剪切
send_keys(Keys.CONTROL,'c')复制
send_keys(Keys.CONTROL,'v')粘贴
send_keys(Keys.SPACE): 空格键(Space)
send_keys(Keys.TAB): 制表键(Tab)
send_keys(Keys.ESCAPE): 回退键(Esc)
send_keys(Keys.ENTER): 回车键(Enter)
send_keys(Keys.F1): 键盘 F1