'''
Author: Liang
LastEditors: Liang
Date: 2020-10-08 11:41:09
LastEditTime: 2020-10-21 13:46:21
Email: str-liang@outlook.com
FilePath: /测试练习e:/Python_project/平时练习/ceshi.py
Environment: Win 10 Python 3.8
Description:
'''
from time import sleep
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait # 元素等待 是一个 Class 类,传参一个对象 class WebDriverWait(object),第二个参数可以设定等待时间
from selenium.webdriver.support import expected_conditions as EC # 和下面的 By 配合使用,确定元素对象
from selenium.webdriver.support.select import Select # 用于下拉框选择
from selenium.webdriver.common.by import By # 类似于 webdriver.Chrome().find_element_by... 这个类似于底层实现
brower = webdriver.Chrome()
brower.get('http://zz222399.225kq.cn/?cid=1')
big_classify = brower.find_element_by_xpath('//*[@id="cid"]')
small_classify = brower.find_element_by_xpath('//*[@id="tid"]');sleep(1)
Select(big_classify).select_by_visible_text('【 免费福利区-每天领取 】');sleep(1)
Select(small_classify).select_by_index(4);sleep(1)
# 判断元素是否存在
try:
# WebDriverWait(brower,10).until(EC.presence_of_element_located((By.XPATH,'//*[@id="layui-layer3"]/div[3]/a'))) # 注意 By 后面不是用的括号,而是直接跟逗号+元素名称,而且 By 是被括号括起来的
find_element = WebDriverWait(brower,10).until(EC.presence_of_element_located((By.XPATH,'//*[@id="layui-layer3"]/div[3]/a')));sleep(1) # 注意By后面不是用的括号,而是直接跟逗号+元素名称)
brower.find_element_by_xpath('//*[@id="layui-layer3"]/div[3]/a').click();sleep(1)
except:
pass
brower.find_element_by_xpath('//*[@id="inputvalue"]').send_keys('516527301');sleep(1)
brower.find_element_by_xpath('//*[@id="submit_buy"]').click()
sleep(5)
brower.quit()
附上知识点小案例--链接可参照
1、本节课知识点 https://selenium-python-zh.readthedocs.io/en/latest/waits.html
2、selenium-python中文文档(大神翻译) https://python-selenium-zh.readthedocs.io/zh_CN/latest/
3、官方文档:https://www.selenium.dev/documentation/zh-cn/
知识点正文如下:
5. 等待页面加载完成(Waits)
现在的大多数的Web应用程序是使用Ajax技术。当一个页面被加载到浏览器时, 该页面内的元素可以在不同的时间点被加载。这使得定位元素变得困难, 如果元素不再页面之中,会抛出 ElementNotVisibleException 异常。 使用 waits, 我们可以解决这个问题。waits提供了一些操作之间的时间间隔- 主要是定位元素或针对该元素的任何其他操作。
Selenium Webdriver 提供两种类型的waits - 隐式和显式。 显式等待会让WebDriver等待满足一定的条件以后再进一步的执行。 而隐式等待让Webdriver等待一定的时间后再才是查找某元素。
5.1. 显式等待
显式等待是你在代码中定义等待一定条件发生后再进一步执行你的代码。 最糟糕的案例是使用time.sleep(),它将条件设置为等待一个确切的时间段。 这里有一些方便的方法让你只等待需要的时间。WebDriverWait结合ExpectedCondition 是实现的一种方式。
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
driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
finally:
driver.quit()
在抛出TimeoutException异常之前将等待10秒或者在10秒内发现了查找的元素。 WebDriverWait 默认情况下会每500毫秒调用一次ExpectedCondition直到结果成功返回。 ExpectedCondition成功的返回结果是一个布尔类型的true或是不为null的返回值。