簡體   English   中英

如何等待直到使用Selenium Python選擇了特定的下拉菜單?

[英]How can I wait until a specific drop-down menu selected using Selenium Python?

我為此頁面( http://www.bobaedream.co.kr/cyber/Cyber​​Car.php?gubun=I )制作了一個爬蟲,以收集特定制造商的庫存清單。 該過程從選擇搜索菜單上部第一行的下拉菜單開始。

在此處輸入圖片說明

每個右下拉菜單都是其左下拉菜單的子菜單。 我想做的是在每個下拉菜單中選擇每個第一項,然后單擊“搜索”按鈕進行首次運行。 爬取其庫存清單后,然后設置上一個下拉菜單的第二項,然后單擊“搜索”按鈕。

但是問題發生在這里。 我將每個下拉菜單的每個項目保存為元組。 當我嘗試為第二輪爬網調用上一個下拉菜單的第二個項目時,發生“ StaleElementReferenceException”或“ NoSuchElementException”,並出現“元素不再連接到DOM”消息。 因此,我想讓元素等待,直到每個下拉迭代的整個回合完成為止。

下面是我的代碼,但仍然有錯誤消息。 我的錯誤通常發生在第二個while循環中。 目前,我猜想第二個“ try”函數中的某種類型的“ wait.until(EC。〜)”代碼可以解決此問題,但是我對此沒有具體想法。 請幫助或給我任何建議。

def option2_menu_loaded(inDriver):
    path = '//select[@id="level2_no"]'
    return inDriver.find_element_by_xpath(path)

self.wait.until(option2_menu_loaded)

while True:
    try:
        select_option2_values = [
            ('%s' % o.get_attribute('text'), '%s' % o.get_attribute('value'))
            for o
            in self.getNewSelect("#level2_no").options
            if o.get_attribute('text') != '세부등급']
    except (StaleElementReferenceException, NoSuchElementException):
        print("Exception Found")
        continue
    break

for option2 in select_option2_values:
    self.csv.setCarTitle(ma, mo, de, option1[0], option2[0])

    print(option2[0], option2[1])
    self.driver.implicitly_wait(0.5)

    while True:
        try:
            self.getNewSelect("#level2_no").select_by_value(option2[1])
        except (StaleElementReferenceException, NoSuchElementException):
            self.getNewSelect("#level2_no").options
            print("Exception Found")
            continue
        break

如果您搜索StaleElementException,將看到解決方案,嘗試在循環內再次查找元素。 因此,這是一個主意 ,在上述例外情況下,請嘗試3次,並延遲1秒,然后再嘗試每次find_Element,這是否有幫助。

另一個想法是在每個爬網之間刷新頁面(肯定不理想,但可能會工作)。 您可以使用以下命令在Python中執行此操作:

driver.refresh()

最后,您也可以避免在爬網時通過所有不同的元素循環(這可能導致StaleElementException),因為Selenium有解決方案。 您可以使用 find_ElementS而不是find_ElemenT來將eveything保存在元組/數組中,而無需遍歷每個記錄。 嘗試看一下是否可以改善整體效果:

a=[];
a = driver.find_elements_by_xpath(path)

祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM