首页 > 其他 > 详细

Selenium

时间:2020-06-05 18:06:00      阅读:60      评论:0      收藏:0      [点我收藏+]

一。异常

1.selenium.common.exceptions.StaleElementReferenceException: Message: The element reference of <div class="deal-cnt"> is stale; either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed

解决方法:

time.sleep(3)

需要等待页面更新即可

2.ElementNotVisibleException

显示等待
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ‘#mainsrp-itemlist .items .item‘)))

WebDriverWait,配合该类的until()和until_not()方法进行的等待。它主要的意思就是:程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException。
调用方法如下:
WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)

until()方法参数:
method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False
message: 如果超时,抛出TimeoutException,将message传入异常

until 中参数method ,用expected_conditions类中的方法:
presence_of_element_located 判断某个元素是否被加到了dom树里
element_to_be_clickable 判断某个元素中是否可见并且是enable的,这样的话才叫clickable
text_to_be_present_in_element 判断某个元素中的text是否包含了预期的字符串
presence_of_all_elements_located: 判断是否至少有1个元素存在于dom树中。举个例子,如果页面上有n个元素的class都是‘column-md-3‘,那么只要有1个元素存在,这个方法就返回True

 1 from selenium import webdriver
 2 from selenium.webdriver.common.by import By
 3 from selenium.webdriver.support.ui import WebDriverWait
 4 from selenium.webdriver.support import expected_conditions as EC
 5 from selenium.common.exceptions import TimeoutException
 6 import re
 7 browser=webdriver.Chrome()  #创建webdriver对象
 8 wait=WebDriverWait(browser, 10)
 9 def search():
10     try:
11         browser.get(https://www.taobao.com)#打开请求的url
12         input = wait.until(
13             EC.presence_of_element_located((By.CSS_SELECTOR,#q)))#等待搜索输入框加载完成
14         input.send_keys("美食")#输入框中输入“美食”
15         sumbit=wait.until(
16             EC.element_to_be_clickable((By.CSS_SELECTOR,#J_TSearchForm > div.search-button > button)))
17         sumbit.click()
18         total=wait.until(
19             EC.presence_of_element_located((By.CSS_SELECTOR,#mainsrp-pager > div > div > div > div.total)))
20         return total.text
21     except TimeoutException:
22         return search
23 
24 def main():
25     total=search()
26     total=int(re.compile((\d+)).search(total).group(1))
27     print (total)
28 if __name__==__main__:
29     main()
30 
31   输出结果: 
32   100

 

submit.send_keys(Keys.ENTER)#模拟回车

Selenium

原文:https://www.cnblogs.com/gloria5/p/13050749.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!