一。异常
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)#模拟回车
原文:https://www.cnblogs.com/gloria5/p/13050749.html