Selenium使用以及报错处理

Selenium实战技巧
本文介绍使用Selenium进行网页自动化操作的常见方法与函数,包括获取URL、提交表单、获取CSS属性值等,并提供异常处理建议。

参考:https://ask.hellobi.com/blog/zhiji/10292

在模拟登录时,常常使用GE和POST携带参数,发送请求,但是遇到参数加密,有两种解决办法,第一个就是找加密的JS,这种方法成功率比较小,需要耐心寻找,第二种就是使用selenium,下面是selenium使用的常用方法和函数,当提示无法定位到元素时,需要睡眠几秒。

新建实例
driver = webdriver.Chrome()

1.获取当前页面Url的函数
方法:current_url
实例:driver.current_url

2.表单的提交
方法:submit
解释:查找到表单(from)直接调用submit即可
实例:driver.find_element_by_id("form1").submit()

3.获取CSS的属性值
方法:value_of_css_property(css_name)
实例:driver.find_element_by_css_selector("input.btn").value_of_css_property("input.btn")

4.获取元素的属性值(一组元素中非常实用)
方法:get_attribute(element_name)
实例:driver.find_element_by_id("sellaiyuan").get_attribute("sellaiyuan")

5.判断元素是否被选中
方法:is_selected()
实例:driver.find_element_by_id("form1").is_selected()

6.返回元素的大小
方法:size
实例:driver.find_element_by_id("iptPassword").size
返回值:{'width': 250, 'height': 30}

7.判断元素是否显示(非常实用)
方法:is_displayed()
实例:driver.find_element_by_id("iptPassword").is_displayed()

8.判断元素是否被使用
方法:is_enabled()
实例:driver.find_element_by_id("iptPassword").is_enabled()

9.获取元素的文本值(非常实用)
方法:text
实例:driver.find_element_by_id("iptUsername").text

10.元素赋值
方法:send_keys(*values)
实例:driver.find_element_by_id("iptUsername").send_keys('admin')

11.删除浏览器所有的cookies
方法:delete_all_cookies()
实例:driver.delete_all_cookies()

12.删除指定的cookie
方法:delete_cookie(name)
实例:deriver.delete_cookie("my_cookie_name")

13.设置等待超时时间,可以在设置的时间内智能等待
方法:implicitly_wait(wait_time)
实例:driver.implicitly_wait(30)

14.查看浏览器的名字
方法:name
实例:drvier.name

15.打印title
方法:title
实例:deriver.title

16.获取cookie并且遍历

cookes1 = driver.get_cookies()

for cookies in cookies1:

    print(cookies)

### 异常处理

(1)错误类型: WinError 6] 句柄无效

处理方法一:把close()换成quit(),或者都试一试。

处理方法二:是其他的浏览器,最好使用火狐的。

https://www.cnblogs.com/mengyu/p/6952774.html  

使用Selenium上传文件时,出现找不到元素的错误(如NoSuchElementException)较为常见。以下是一些可能的原因及解决办法: ### 元素定位方式问题 可能是使用的定位方式不准确,导致无法找到对应的元素。可以尝试更换定位方式,例如使用`id`、`name`、`xpath`、`css selector`等。在引用[2]中使用了`find_element_by_name`的方式,如果这种方式不行,可尝试其他方式。示例代码如下: ```python from selenium import webdriver import os, time driver = webdriver.Chrome() file_path = 'file:///' + os.path.abspath('upload.html') driver.get(file_path) # 使用xpath定位上传按钮 upload_button = driver.find_element_by_xpath('//input[@type="file"]') upload_button.send_keys('D:\\PycharmProjects\\test\\upload.txt') time.sleep(2) driver.quit() ``` ### 页面加载问题 页面可能还未完全加载完成,就开始尝试定位元素,从而导致找不到元素。可以使用显式等待或隐式等待来确保页面元素加载完成。示例代码如下: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import os driver = webdriver.Chrome() file_path = 'file:///' + os.path.abspath('upload.html') driver.get(file_path) # 显式等待,最多等待10秒,直到上传按钮可被点击 wait = WebDriverWait(driver, 10) upload_button = wait.until(EC.element_to_be_clickable((By.NAME, 'file'))) upload_button.send_keys('D:\\PycharmProjects\\test\\upload.txt') driver.quit() ``` ### 元素在iframe中 如果元素位于iframe中,需要先切换到对应的iframe,才能定位到元素。示例代码如下: ```python from selenium import webdriver import os, time driver = webdriver.Chrome() file_path = 'file:///' + os.path.abspath('upload.html') driver.get(file_path) # 切换到iframe iframe = driver.find_element_by_id('iframe_id') driver.switch_to.frame(iframe) # 定位上传按钮 upload_button = driver.find_element_by_name('file') upload_button.send_keys('D:\\PycharmProjects\\test\\upload.txt') # 切换回默认内容 driver.switch_to.default_content() time.sleep(2) driver.quit() ``` ### 元素动态加载 有些元素是通过JavaScript动态加载的,需要等待动态加载完成后再进行定位。可以结合显式等待和JavaScript代码来处理。示例代码如下: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import os driver = webdriver.Chrome() file_path = 'file:///' + os.path.abspath('upload.html') driver.get(file_path) # 等待动态加载完成 wait = WebDriverWait(driver, 10) wait.until(EC.presence_of_element_located((By.NAME, 'file'))) # 定位上传按钮 upload_button = driver.find_element_by_name('file') upload_button.send_keys('D:\\PycharmProjects\\test\\upload.txt') driver.quit() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值