繁体   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