python - 用selenium,出现这个错误: WebDriverException
巴扎黑
巴扎黑 2017-04-17 17:59:05
0
2
369

问题就是搜索百度的关键词结果页面,然后随机点击这个页面的链接,我xpath是这样写的

先找到每个排名结果的区域块,
list1 = browser.find_elements_by_xpath('//*[@class="result c-container "]')

这个时候会得到一个列表,列表的每个对像就对应的一个排名的结果所在的区域块,然后在随机抽取这个列表中的块来进行点击(点击第三个排名结果):
list1[2].find_element_by_xpath('h3/a').click()

但是我再运行代码的时候,有的时候可以点击有的时候又不能点击,同样的页面~,相当不稳定,出错是这样的,百度也不能找到相关的答案


问题2,针对上一个问题的升级,我点击一个链接,就会出现新窗口(具体的搜索结果网站),我把窗口切换过去,然后随便浏览一下,在关闭窗口,然后把句柄在切换回来,这个时候,在进行点击的时候~发现又不行~~出现同样的错误,但是有的时候如果把等待时间设置长了又可以~,但是又测试又不行~
总之一句话,不稳定!!不知道高手知道这个要怎么解决?
下面是完整代码:

#coding:utf-8
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time,datetime
from random import choice
import random

def get_ele_times(browser,times,func):
    return WebDriverWait(browser,times).until(func)

browser = webdriver.Firefox()
browser.get('https://www.baidu.com/s?wd=张特')
get_ele_times(browser,10,lambda brower: brower.find_element_by_id('content_bottom'))
now = browser.current_window_handle     #主要浏览器句柄
ranks = browser.find_elements_by_xpath('//*[@class="result c-container "]')
序号 = random.sample(range(len(ranks)), random.randint(2,5))

for i in 序号:
    ranks = browser.find_elements_by_xpath('//*[@class="result c-container "]')
    ranks[i].find_element_by_xpath('h3/a').click()
    time.sleep(1)
    allhandles = browser.window_handles
    for handle in allhandles:
        if handle != now:
            browser.switch_to_window(handle)    #切换成新窗口
    browser.close() #再关闭
    browser.switch_to_window(now)   #再切换回来
    get_ele_times(browser,10,lambda brower: brower.find_element_by_id('content_bottom'))
    time.sleep(10)
巴扎黑
巴扎黑

모든 응답(2)
小葫芦

저도 최근에 셀레늄을 사용하고 있는데 문제는 귀하가 겪은 문제와 매우 유사합니다. 동일한 페이지인데, 요소를 찾은 후 여러 번 클릭할 수 있고, 몇 번 후에도 작동하지 않는 경우가 있습니다.

나중에 문제를 발견했습니다. find_elements_by_xpath 또는 id, text, css, 반환된 목록(예: 순위), 그 안에 있는 값의 위치가 변경됩니다. 순위 후에는 사전처럼 느껴집니다.[1 ]를 사용했는데 다음번에는 Ranks[1]을 찾을 수 없을지도 모르겠습니다. 인쇄해 보니 메모리 주소가 바뀌는 것 같더군요. 다음번에는 이 목록이 엉망이 될 수도 있습니다.

결국 한 번만 찾을 수 있었고, 목록에서 한 요소를 클릭하고, 전체 목록을 클릭한 후에는 목록이 비어 있었습니다. 위치를 바꾼 후 찾아보세요.

중간에 큰 문제가 있습니다. 즉, 이 목록을 반복할 때 중간에 잠을 자지 않는 것이 가장 좋습니다. 이렇게 잠시 잠을 자면 목록의 요소가 변경되었을 수 있습니다. 위치를 찾을 수 없습니다. 이유는 모르겠지만 시간이 지날수록 더 지저분해집니다.

동일한 웹페이지를 40번 반복하면 전체 웹페이지가 새로 고쳐지고 찾기 위치가 재설정되도록 설정했습니다. 15시간 동안 문제 없이 계속 작동할 수 있습니다.

이전에도 새로고침하고 다시 찾아본 적이 있는데 메모리와 CPU 소모가 많이 됩니다.

간단히 말하면 순위 목록의 요소는 지속적으로 업데이트되어야 합니다.

별로 유용하지 않은 또 다른 스플린터 패키지도 있습니다.

黄舟

어떤 경우에는 창 크기를 설정해야 할 수도 있습니다.
두 번째 문제는 겪어본 적이 없으니 말도 안 되는 소리는 하지 않겠습니다. 🎜>

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿