如何等到使用seleniumpython选择一个特定的下拉菜单?

2024-09-28 03:20:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我为这个页面做了一个爬虫(http://www.bobaedream.co.kr/cyber/CyberCar.php?gubun=I)来收集特定制造商的库存清单。这个过程是从选择搜索菜单上部第一行的下拉菜单开始的。在

enter image description here

每个右下拉菜单都是其左下拉菜单的子菜单。我想做的是在每个下拉菜单中选择每个第一项,然后单击“搜索”按钮进行第一次运行。在抓取了它的股票列表之后,我设置了最后一个下拉菜单的第二项,然后点击“搜索”按钮。在

但问题就发生在这里。我把每个下拉菜单的每一项都保存为元组。当我尝试调用最后一个下拉菜单的第二项进行第二轮爬网时,会出现“StaleElementReferenceException”或“NoSuchElementException”,并显示“Element不再附加到DOM”。因此,我想让元素等到每个下拉迭代的整轮完成。在

下面是我的代码,但仍然有错误消息。我的错误通常发生在第二个while循环中。此时此刻,我想是某种类型的“等等,直到第二个“try”函数中的(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

Tags: noselfget菜单attributeselectprinttry
1条回答
网友
1楼 · 发布于 2024-09-28 03:20:18

如果搜索StaleElementException,您将看到尝试在循环中再次找到元素的解决方案。因此,这是一个想法,在上面的异常中,在每次尝试再次找到_元素之前,尝试3次,延迟1秒,看看这是否有帮助。在

很可能不是每一个页面都能刷新。在Python中可以使用以下方法:

driver.refresh()

最后,您还可以避免在爬行时遍历所有不同元素的循环(这可能会导致StaleElementException),因为Selenium对此有一个解决方案。通过使用查找元素代替查找元素,您可以保存元组/数组中的所有内容,而不必遍历每个记录。试试看它是否能提高你的整体表现:

^{pr2}$

祝你好运!在

相关问题 更多 >

    热门问题