python selenium + chrome(入门与实践)

一、selenium的安装

pip install selenium

二、selenium的使用

1.实践须知

定位元素

定位一个元素定位多个元素定位条件
find_element_by_id~elements ~id
find_element_by_name~elements ~name
find_element_by_tag_name~elements ~tag_name
find_element_by_class_name~elements ~class_name
find_element_by_css_selector~elements ~css_selector
find_element_by_xpath~elements ~xpath
find_element_by_link_text~elements ~link_text
find_element_by_partial_link_text~elements ~partial_link_text

xpath定位的一些常用写法:

driver.find_element_by_xpath("//*[@id='kw']")
driver.find_element_by_xpath("//input[@id='kw']")
driver.find_element_by_xpath("/html/body/form/span/input")
driver.find_element_by_xpath("//div[@id='s_fm']/span")
driver.find_element_by_xpath("//div[@id='s_fm' and @class='s_form s_form_login']")
#以上写法只是举例,写的路径不一定正确

css_selector定位的一些常用写法:

driver.find_element_by_css_selector("#kw")
driver.find_element_by_css_selector(".s-p-top")
driver.find_element_by_css_selector("html > body > from > sapn > input")
driver.find_element_by_css_selector("div#wrapper > div#head_wrapper")

webdriver常用方法

方法说明
back()后退
forward()前进
clear()清楚输入框内文本内容
click()单击定位元素
submit()用于提交表单,可模拟输入内容之后的回车操作
size()返回元素尺寸
is_displayed()当前元素是否可见
text获取元素文本信息
get_attribute(name)获取属性值
send_keys(value)向输入框键入内容
set_window_size()设置浏览器窗口大小
current_url返回当前url
title返回当前title
send_keys(Keys.BACK_SPACE)删除键
send_keys(Keys.SPACE)空格键
send_keys(Keys.ENTER)回车键
send_keys(Keys.CONTROL , ‘a’)全选,其它ctrl组合键更改引号中的值即可
perform()执行所有ActionChains中存储的行为
context_click()右击
double_click()双击
drag_and_drop()拖动
move_to_element()鼠标悬停
get(url)通过浏览器向服务器发送url请求
switch_to.frame()切换表单
switch_to.window(handle)切换窗口
current_window_handle()获取当前窗口句柄
window_handles()获取所有窗口句柄
switch_to.alert定位altert类型的警告框,执行accept/dismiss/text/send_keys操作
switch_to.confirm定位confirm类型的警告框,执行accept/dismiss/text/send_keys操作
switch_to.prompt定位prompt类型的警告框,执行accept/dismiss/text/send_keys操作
accept()接受现有警告 (switch_to.alert.accept())
dismiss()解散现有警告
send_keys(keysToSend)发送文本到警告框
get_cookies()获取所有cookie信息
get_cookie(name)返回字典的key为name的cookie信息
add_cookie(cookie_dict)添加cookie,cookie_dict为字典对象,需要有name和value
delete_cookie(name,optionsString)删除cookie信息,name为删除的cookie名称,其后者是该cookie的选项
delete_all_cookies()删除所有cookie信息
execute_script(js)执行js
get_screenshot_as_file(path)截取当前窗口,path为保存路径
implicitly_wait()元素(隐式)等待,单位秒,设置的时间并非等待时间,不针对某一元素,当脚本执行到元素定位时,定位成功,则继续执行,否则以轮询的方式判断元素是否被定位到,超出设置的时间没有定位到就抛出异常,如果在设置时间内定位到元素,则继续执行
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)元素(显示)等待,一般与until()或until_not()一起使用
colse()关闭单个窗口
quit()关闭所有窗口(退出浏览器)

PS:

alert类型消息框,该消息框提供了一个“确定”按钮让用户关闭该消息框,用户必须先关闭该消息框然后才能继续进行操作。

confirm类型消息框,该消息框提供了“确定”和“取消”按钮让用户选择执行一个操作,用户必须先响应该消息框操作后才能继续进行操作。

prompt类型消息框,当该提示框出现后,需要输入某个值,然后点击确认或取消按钮才能继续进行操作。

2.应用实践

from selenium import webdriver
from time import sleep,ctime
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome("F:\chromedriver_win32\chromedriver.exe") # 定义浏览器对象,打开一个空白浏览器窗口
driver.set_window_size(1400,800)  #设置浏览器窗口大小
driver.get("http://www.baidu.com")  # 向服务器发送url请求
locator = (By.ID,'kw')
#dw = WebDriverWait(driver,10).until(EC.presence_of_element_located(locator),message='未定位到元素或超时!')
dw = WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id('kw'),message='未定位到元素或超时!') #元素等待
dw.send_keys('selenium') # 输入内容
sleep(2)
# #dw.send_keys(Keys.ENTER)
dw.submit()
sleep(2)
title = driver.title # 获取当前title
print(title)
url = driver.current_url # 获取当前url
print(url)
size = driver.find_element_by_id('kw').size  # 获得输入框的尺寸
print('1',size)
#text = driver.find_element_by_id("s-bottom-layer-right").text  # 返回百度页面底部备案信息
#print('2',text)
attribute = driver.find_element_by_id("kw").get_attribute('id')  # 返回元素的属性值, 可以是 id、 name、 type 或其他任意属性
print('3',attribute)
result = driver.find_element_by_id("kw").is_displayed()  # 返回元素的结果是否可见, 返回结果为 True 或 False
print('4',result)
driver.refresh()  #刷新浏览器
sleep(2)
num_result = driver.find_element_by_class_name('nums_text').text # 获取搜索结果数
print(num_result)
driver.find_element_by_id('kw').clear() # 清除输入框文本
sleep(2)
js="window.open('http://www.baidu.com')" #新标签页打开这个url
driver.execute_script(js)
sleep(4)
handle = driver.current_window_handle  #获取当前窗口句柄,第一个打开的窗口
print(handle)
all_handle = driver.window_handles #获取所有窗口句柄
print(all_handle)
driver.switch_to.window(all_handle[1])  #窗口切换  ()内为窗口句柄,可用循环来判断切换
#sleep(4)
driver.find_element_by_id('kw').send_keys('python')
sleep(3)
driver.find_element_by_id('su').click()
sleep(2)

#设置浏览器窗口的滚动条滑动
for i in range(1,12,3):
    sleep(1)
    j = i/12
    js1 = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j
    driver.execute_script(js1)
co = driver.get_cookies() #获得所有cookie信息
print(co)
# #鼠标悬停到定位元素
# test = driver.find_element_by_name('tj_settingicon')
# ActionChains(driver).move_to_element(test).perform()
# sleep(2)
# #打开搜索设置
# driver.find_element_by_link_text('搜索设置').click()
# sleep(2)
# #进行设置
# driver.find_element_by_id('s1_2').click()
# sleep(2)
#保存设置
# driver.find_element_by_link_text('保存设置').click()
# sleep(2)
# # 接受警告框
# driver.switch_to.alert.accept()
# # # 解散警告框
# # driver.switch_to.alert.dismiss()
# sleep(2)

#鼠标悬停到定位元素
test = driver.find_element_by_name('tj_settingicon')
ActionChains(driver).move_to_element(test).perform()
sleep(2)
# 打开高级搜索
driver.find_element_by_link_text('高级搜索').click()
sleep(2)
# 进行设置
driver.find_element_by_xpath('//*[@id="adv-setting-gpc"]/div/div[1]/i[1]').click()
driver.find_element_by_xpath('//*[@id="adv-setting-gpc"]/div/div[2]/div[2]/p[5]').click()
sleep(2)
driver.find_element_by_xpath('//*[@id="adv-setting-8"]/input').click()
sleep(4)
# driver.get_screenshot_as_file("D:\\baidu_img.jpg") # 截取当前窗口,并指定截图图片的保存位置
driver.close() # 关闭当前窗口
driver.quit() # 关闭所有窗口(退出浏览器)


#ps:
# driver.get('http://www.126.com')
# # driver.switch_to.frame(0)  #定位第一个表单
#
# i = driver.find_element_by_tag_name("iframe")
# driver.switch_to.frame(i)  #定位表单
#
# # driver.switch_to.default_content()  #跳回最外层页面,退出表单里面
# driver.find_element_by_name('email').send_keys('123456')

参考:
https://blog.csdn.net/weixin_36279318/article/details/79475388

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值