selenium使用笔记

2 篇文章 0 订阅
2 篇文章 0 订阅

安装py库

pip install selenium

下载驱动webdriver

将驱动放置python根目录(部分驱动需要改名)

基本框架

# 加入单元测试
import unittest
#引入休眠
from time import sleep
#引入web驱动
from selenium import webdriver
#引入驱动选择器使用.find_element(By.XPATH, '//*[@id="su"]')
from selenium.webdriver.common.by import By
class PythonOrgSearch(unittest.TestCase):
    # 开始运行的函数
    def setUp(self):
        print("加载驱动")
        self.driver = webdriver.Edge()
    # 开始运行完运行的函数(必须以test开头)
    def test_open(self):
        print("中间运行")
        self.driver.get(r'https://www.baidu.com/')
        sleep(5)
    # 结束运行的函数
    def tearDown(self):
        print("结束运行")
        self.driver.close()
# 入口函数
if __name__ == "__main__":
    unittest.main()

此时只需要修改中间运行的主函数即可

对网页的操作

首先要获取主页的控件

(4版本已弃用)根据id、根据xpath、根据标签名、根据控件

element = driver.find_element_by_id("passwd-id")
element = driver.find_element_by_name("passwd")
element = driver.find_elements_by_tag_name("input")
element = driver.find_element_by_xpath("//input[@id='passwd-id']")
新版导入from selenium.webdriver.common.by import By
(4版本)新元素定位方法
searchTag = driver.find_element(By.ID, "value") 利用ID定位
searchTag = driver.find_element(By.CLASS_NAME, "value")利用类名定位 
searchTag = driver.find_element(By.NAME, "value") 利用name属性定位
searchTag = driver.find_element(By.TAG_NAME, "value") 利用标签名定位
searchTag = driver.find_element(By.XPATH, "value") 利用xpath定位
searchTag = driver.find_element(By.CSS_SELETOR, "value")利用CSS选择器定位
选择多文件
driver.find_elements(By.XPATH, '//button')

休眠2秒

sleep(2)

文本框

输入文本
self.driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys("some text")
清除文本
self.driver.find_element(By.XPATH, '//*[@id="kw"]').clear()

点击按钮

element = self.driver.find_element(By.XPATH, '//*[@id="su"]').click()

提交表单

element .submit()

选择框(俩种情况)

selenium的下拉选择框。我们通常会遇到两种下拉框,
一种是使用input标签做的假下拉框。(直接用点击按钮方法点击ul-li)
另一种使用的是html的标签select,
<select name="selecta" id="selectA">
    <option value="bj">北京</option>
    <option value="sh">上海</option>
    <option value="gz">广州</option>
    <option value="cq">重庆</option>
</select>
需要导入select
from selenium.webdriver.support.select import Select
然后
寻找根据需要选择
Select(self.driver.find_element(By.ID, "selectA")).select_by_visible_text("重庆")
选中方法如下
select_by_index(2):通过下标选中元素,下标从0开始
select_by_visibile_text:通过值选中元素
select_by_value:通过value值选中元素

拖拽控件

导入from selenium.webdriver import ActionChains
需拖动元素
element = driver.find_element_by_name("source")
要拖到位置
target = driver.find_element_by_name("target")
实现将("source")拖到("target")
action_chains = ActionChains(driver)
action_chains.drag_and_drop(element, target).perform()

打开多网页

打开第一个网页
        self.driver.get(r'http://baidu.com')
利用JS打开第二个网页
        self.driver.execute_script("window.open('https://www.zhihu.com')")
获取当前浏览器所有网页
        handles = self.driver.window_handles
切换到第一个打开的
        self.driver.switch_to.window(handles[0])
切换到第二个打开的
        self.driver.switch_to.window(handles[1])

弹窗检测

弹窗类型
alert("只有确定按钮")
confirm("有确定和取消")
prompt("有确定和取消还有输入框")
如果关闭时有弹窗会报错
获取当前弹窗
alert = self.driver.switch_to.alert
获取弹窗内容print(alert.text)
点击确定alert.accept()
点击取消alert.dimiss()
只能对prompt弹框输入字符,alert 和 confirm 会报错  send_keys()  (目前不知道什么原因,未输入成功)  

前进与后退

driver.forward()前进
driver.back()后退

COOKIE

打开网址
  self.driver.get("http://www.example.com")  
编辑cookie写入
        cookie = {'name' : 'foo', 'value' : 'bar'}
        driver.add_cookie(cookie)
获取并打印
        print(driver.get_cookies())

等待

导入from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
打开网页
driver = webdriver.Chrome()
driver.get("http://somedomain/url_that_delays_loading")

显式等待

显式等待指定某个条件,然后设置最长等待时间。如果在这个时间还没有找到元素,那么便会抛出异常了。程序默认会 500ms 调用一次来查看元素是否已经生成,如果本来元素就是存在的,那么会立即返回。 下面是一些内置的等待条件

try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
finally:
    driver.quit()

隐式等待比较简单,就是简单地设置一个等待时间,单位为秒。

driver.implicitly_wait(10) 
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值