活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需写作干货注入能量… 热爱写作,愿意让自己成为更好的人…
承接上文,继续列举Selenium的基操
ret = browser.find_element_by_class_name('element')
print(ret[0].text)
ret = browser.find_element_by_tag_name('a')
print(ret[0].get_attribute('href'))
# 前进
browser.forward()
# 后退
browser.back()
from selenium import webdriver
browser = webdriver.Chrome()
url = 'https://www.baidu.com/'
browser.get(url)
js = 'window.scrol1To(O,document.body.scrollHeight)' # js语句
browser.execute_script(js) # 执行js的方法
browser.quit()
现在的网页大部分采用了Ajax技术
(AJAX即“Asynchronous JavaScript and XML”(非同步的JavaScript与XML技术),指的是一套综合了多项技术的浏览器端网页开发技术。Ajax的概念由杰西·詹姆士·贾瑞特所提出[1]。)来自维基百科
非同步的技术导致程序不能精准地确定什么时间什么元素完全加载完成,如果实际页面等待时间过长,这将会导致元素不完全,但是代码将会直接使用,所以就会报错。
为了避免这种元素不好定位且错误概率高,Selenium提供了两种等待方式
隐式等待是指等待特定的时间
隐式等待针对的是元素定位。它设置了一个时间,判断在该时间段内,元素定位是否成功。
如果成功了,就进行下一步。如果没成功,就直接报超时。
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10) # 隐式等待10秒
driver.get('https://www.baidu.com/')
myDynamicElement = driver.find_element_by_id("input")
显式等待是指定的某一条件成立时继续执行
即等待某个指定的元素,然后设置最长等待时间,如果在这个时间内还没有找到元素,则程序将会抛出异常。
from selenium import webdriver
from selenium.webdriver.common.by import By
# WebDriverWait 库,负责循环等待
from selenium.webdriver.support.ui import WebDriverWait
# expected_conditions 类,负责条件出发
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
try:
# 页面一直循环,直到 id="input" 出现
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "input"))
)
finally:
driver.quit()