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

问题就是搜索百度的关键词结果页面,然后随机点击这个页面的链接,我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)
巴扎黑
巴扎黑

membalas semua(2)
小葫芦

Saya juga telah menggunakan selenium baru-baru ini dan masalahnya hampir sama dengan yang anda hadapi. Ia adalah halaman yang sama Selepas mencari elemen, kadangkala ia boleh diklik berkali-kali, dan kadangkala ia tidak akan berfungsi selepas beberapa kali.

Kemudian saya menemui masalah, find_elements_by_xpath atau id, teks, css, senarai yang dikembalikan, seperti pangkat anda, kedudukan nilai di dalamnya akan berubah, rasanya seperti kamus, selepas ranking[1 ] digunakan, lain kali Mungkin pangkat [1] tidak dapat ditemui Saya tidak tahu mengapa saya mencetaknya dan nampaknya alamat ingatan itu berubah dalam senarai ini akan kacau masa depan. Mungkin saya tidak dapat mencarinya.

Pada akhirnya, saya hanya dapat mencari sekali, klik pada satu elemen dalam senarai, dan alih keluar satu Selepas mengklik pada keseluruhan senarai, senarai itu kosong. Letakkan semula dan kemudian cari.

Ada masalah besar di bahagian tengah, iaitu, apabila anda melangkau senarai ini, sebaiknya jangan tidur di tengah Jika anda tidur seketika seperti ini, elemen dalam senarai mungkin telah berubah kedudukannya dan tidak dapat ditemui Saya tidak tahu mengapa, tetapi ia menjadi lebih kucar-kacir seiring dengan berlalunya masa.

Saya menetapkan bahawa selepas menggelung halaman web yang sama sebanyak 40 kali, keseluruhan halaman web akan dimuat semula dan carian akan diletakkan semula. Ia boleh berjalan secara berterusan selama 15 jam tanpa sebarang masalah.

Saya telah mencuba menyegarkan dan mencari semula sebelum ini, tetapi ini menggunakan banyak memori dan CPU.

Ringkasnya, elemen dalam senarai pangkat perlu sentiasa dikemas kini.

Ada satu lagi pakej serpihan, yang tidak begitu berguna juga.

黄舟

Dalam beberapa kes, anda perlu menetapkan saiz tetingkap Anda juga boleh memulakan pemacu dan menetapkannya untuk memaksimumkannya
Saya tidak pernah menghadapi masalah kedua, jadi saya tidak akan bercakap kosong - -

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan