Python,Selenium:当ul列表过长时,无法通过xpath查找元素

德思

我正在尝试创建一个程序来提取我在Instagram上关注的所有人。我正在使用Python,Selenium和Chromedriver。

为此,我首先获得关注人数,然后单击“关注”按钮:

nb_abonnements = int(webdriver.find_element_by_xpath('/html/body/span[1]/section[1]/main/div[1]/header/section[1]/ul/li[3]/a/span').text)

sleep(randrange(1,3))
abonnements = webdriver.find_element_by_xpath('/html/body/span[1]/section[1]/main/div[1]/header/section[1]/ul/li[3]/a')
abonnements.click()

然后,我使用以下代码获取关注者并滚动弹出页面,以防万一找不到:

followers_panel = webdriver.find_element_by_xpath('/html/body/div[3]/div/div/div[2]')
while i < nb_abonnements:
    try:
        print(i)
        followed = webdriver.find_element_by_xpath('/html/body/div[3]/div/div/div[2]/ul/div/li[{}]/div/div[2]/div/div/div/a'.format(i+1)).text
        #the followeds are in an ul-list
        i += 1
        followed_list.append(followed)
        except NoSuchElementException:
        webdriver.execute_script(
            "arguments[0].scrollBy(0,400)",followers_panel
        )
        sleep(7)

问题是一旦我12岁,程序就会引发异常并滚动。从那里开始,他仍然找不到下一个跟随者,并且陷入了一个循环,在循环中他除了滚动以外什么也不做。我已经检查了IG页面的源代码,事实证明该路径仍然有效,但是显然我无法像以前那样访问这些元素,这可能是因为我正在访问它们的ul-list已变为long(程序的第5行)。

我无法解决该问题。希望您会有所帮助。

更新:DOM看起来像这样:

html
    body
        span
        script
        ...
        div[3]
              div
                 ...
                     div
                         div
                         div[2]
                               ul
                                 div
                                    li
                                    li
                                    li
                                    li
                                    ...
                                    li

ul是追随者清单。li小号包含信息我试图提取物(用户名)。即使我自己一个人走在网页上,打开弹出窗口,稍微滚动并加载所有内容,也无法通过在DOM的搜索栏中手动键入xpath来找到所需的元素。尽管路径是正确的,但我可以通过查看DOM进行检查。

我已经尝试过各种用于硒的webdriver,目前我正在使用chromedriver 2.45.615291。我还明确指定了等待元素显示(WebDriverWait(webdriver, 10).until(EC.presence_of_element_located((By.XPATH, '/html/body/div[3]/div/div/div[2]/ul/div/li[{}]/div/div[2]/div/div/div/a'.format(i+1)))))的时间,但我只收到了一个超时异常:selenium.common.exceptions.TimeoutException: Message:

似乎一旦ul列表过长(这是从我向下滚动足以加载新人的那一刻起),我就无法通过其XPATH访问列表的任何元素,即使是已经加载的元素在我开始滚动之前。

德思

我提供了一种解决方案:我只是通过XPATH访问元素,如下所示:find_element_by_xpath("(//*[@class='FPmhX notranslate _0imsa '])[{}]".format(i))我不知道为什么它不能以其他方式起作用,但是像这样,它可以正常工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Selenium:无法通过XPATH Python查找元素

Python Selenium:浏览器无头时无法通过xpath查找元素

Python Selenium无法通过xpath查找表元素

如何通过长时间复杂的xpath查找元素?

Python 中 Selenium 中的网页抓取 - 通过 xpath 或 id 查找元素返回空列表

在 Selenium 中尝试通过 Xpath 查找元素时出错

使用宏时,通过xpath查找元素不起作用,Selenium python

链接具有Javascript时,无法通过XPath查找元素

Python selenium 通过 xpath 或 css 选择器查找元素

Python Selenium:通过XPath查找元素,&nbsp; 问题

如何通过Selenium和Python根据html查找元素的Xpath

Python 3 + Selenium:如何通过xpath查找此元素?

在Python Selenium中通过xPath查找表元素

Python Selenium使用OR运算符通过xpath查找元素

Python Selenium无法使用绝对xpath div查找元素

无法使用Appium / Python通过XPATH查找元素

通过 xpath 查找元素 - selenium propper 格式

使用Selenium和Python无法通过xpath定位元素

Python Selenium 无法通过类名和 xpath 找到元素

在 Selenium Python 中通过链接文本或 XPATH 使用“查找元素”时,“str”对象不可调用错误

通过LXML通过XPATH查找元素-Python

硒无法通过xpath查找元素

无法通过ID或XPath查找输入元素

Selenium 无法通过 xpath 或类找到元素

通过 X_PATH 使用 Python 使用 Selenium 查找“ul”元素

Python / Selenium-通过xpath查找元素-那里的元素,但未找到

当父 <ul> 元素包含属性 style="display: none;" 时,如何创建自动完成 <li> 元素的列表 通过 Java Selenium

Selenium-Python Safari WebDriver-未通过xpath查找元素

Python Selenium - 通过相对 xpath 获取元素