简化你的Python Selenium Webdriver代码:二次封装显式等待与元素定位
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了简化你的Python Selenium Webdriver代码:二次封装显式等待与元素定位,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3588字,纯文字阅读大概需要6分钟。
内容图文
![简化你的Python Selenium Webdriver代码:二次封装显式等待与元素定位](/upload/InfoBanner/zyjiaocheng/630/cbafb7e09fd74f16841d4123f2513791.jpg)
在不使用任何二次封装的情况下,很多时候必须写一行元素等待,再进行操作,并且代码看上去实在是很长。比如一个简单的登陆操作,得写这么一大堆:
from selenium import webdriver
from time import sleep
def loginWebsite():
driver.get('www.xxx.com')
driver.maximize_window()
username = 'username'
password = 'password'
sleep(3)
driver.find_element_by_id("dropdown-account").click()
sleep(3)
driver.find_element_by_id("login").send_keys(username)
driver.find_element_by_id("login").submit()
sleep(3)
driver.find_element_by_id("password").send_keys(password)
driver.find_element_by_id("password").submit()
这还是直接有id定位+强制等待的情况下,同样的功能,如果我们只有css/xpath可以参考,并且使用隐式/显示等待,那代码就会更长更丑(虽然不难读懂):
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
def login():
driver.get('www.xxx.com')
driver.implicitly_wait(10)
try:
driver.find_element_by_xpath('//*[@id="secondary-\block"]/div[1]/div/div/div[1]/label').click()
except NoSuchElementException as e:
print(e)
#隐式等待10s
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CSS_SELECTOR,'#logoin-page > div > div > section > input'),message='')
driver.find_element_by_css_selector('#order-detail-page > div > div > section > p').send_keys(username)
driver.find_element_by_css_selector('#order-detail-page > div > div > section > p').submit()
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH,'//*[@id="secondary-\block"]/div[1]/div/div/div[2]'),message='')
driver.find_element_by_xpath('//*[@id="secondary-\block"]/div[1]/div/div/div[2]').send_keys(password)
driver.find_element_by_xpath('//*[@id="secondary-\block"]/div[1]/div/div/div[2]').send_keys(submit)
#显示等待10s
#presence_of_element_located判断某个元素是否被加到了dom 树里
不管使用哪种,都是等元素,找元素,操作元素。要写三句啊很麻烦有木有!下面直接上我的封装代码:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
class A:
def __init__(self):
self.driver = webdriver.Chrome('D:/chromedriver.exe')
def find(self,method,value,secs=20):
wait = WebDriverWait(self.driver, secs)
try:
if method == 'id':
wait.until(EC.presence_of_element_located((By.ID, value)))#presence_of_element_located省略了message字段必须有两层括号
element = self.driver.find_element_by_id(value)
elif method == 'name':
wait.until(EC.presence_of_element_located((By.NAME, value)))
element = self.driver.find_element_by_name(value)
elif method == 'class':
wait.until(EC.presence_of_element_located((By.CLASS_NAME, value)))
element = self.driver.find_element_by_class_name(value)
elif method == 'linktext':
wait.until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, value)))
element = self.driver.find_element_by_partial_link_text(value)
elif method == 'xpath':
element = self.driver.find_element_by_xpath(value)
wait.until(EC.presence_of_element_located((By.XPATH, value)))
elif method == 'css':
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, value)))
element = self.driver.find_element_by_css_selector(value)
else:
print("语法错误")
except BaseException as e:
print(e)
return element
这样我再在这个class里写登陆function的时候,只需要:
def login(self,username,password):
self.find('id','dropdown-account').click()
self.find('id','login').send_keys(username)
self.find('id','login').submit()
self.find('id','password').send_keys(password)
self.find('id','password').submit()
简洁哭了有木有!!!
内容总结
以上是互联网集市为您收集整理的简化你的Python Selenium Webdriver代码:二次封装显式等待与元素定位全部内容,希望文章能够帮你解决简化你的Python Selenium Webdriver代码:二次封装显式等待与元素定位所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。