如何在 Instagram 上制作正确的 xpath 个人资料?

问题描述 投票:0回答:1

我不断收到此错误。我想选择一个用户,然后从列表中向下滚动,但我收到错误“没有这样的元素:无法定位元素:”,即使我检查过并且此 xpath 中有这样一个元素。 https://www.instagram.com/leomessi/followers/ 我想选择其中一位关注者。

    def follow_followers(self):
        user = input("account username: \t")
        self.go_to_user(user)
        temp = self.driver.find_element(By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div/div[1]/div[1]/div[2]/div[2]/section/main/div/header/section/ul/li[3]/a/span/span").text
        num_of_followers = self.convert_to_number(temp)
        amount = random.randint(20, 50)
        temp = self.driver.find_element(By.XPATH,"/html/body/div[2]/div/div/div[2]/div/div/div/div[1]/div[1]/div[2]/div[2]/section/main/div/header/section/ul/li[2]/a").click()
        i, k = 1, 1
        while(k <= amount):
            waiting_time = 3600/50
            self.wait(1,3)
            current_user = self.driver.find_element(By.XPATH, "//*[@id='mount_0_0_iW']/div/div/div[3]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div/div[2]/div[1]/div/div[{}]/div".format(i))
            button = current_user.find_elements(By.XPATH, ".//button")
            name = current_user.find_element(By.XPATH, "/html/body/div[2]/div/div/div[3]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div/div[2]/div[1]/div/div[11]/div/div/div/div[2]/div/div/div/a/div/div/span").text
            if button and button[0].text == "Follow":
                self.wait(waiting_time-10,waiting_time)
                button[0].click()
                self.add_followed_list(name)
                k+=1
            self.wait(1,2)
            self.driver.execute_script("arguments[0].scrollIntoView()", current_user)
            i += 1

我尝试为不同的 div 采用 xpath 和完整 xpath,但仍然收到此错误。错误在于

current_user = self.driver.find_element(By.XPATH, "//*[@id='mount_0_0_iW']/div/div/div[3]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div/div[2]/div[1]/div/div[{}]/div".format(i))
python selenium-webdriver xpath instagram
1个回答
0
投票

如果我理解你是正确的,并且所需的按钮是模式上的“跟随按钮”,则正确的选择器是

[role=dialog] ._aano button

name元素通过索引和选择器对应

[role=dialog] .x1q0g3np a span

所以名称和按钮

dialog = driver.find_element(By.CSS_SELECTOR, '[role=dialog]')

name = dialog.find_elements(By.CSS_SELECTOR, '._aano button')[i].text
button = dialog.find_elements(By.CSS_SELECTOR, '.x1q0g3np a span')[i]

在这种情况下,您不需要检查按钮文本来单击它。

使用

non-relative selector
是一种不好的做法,因为你依赖于可以轻松更改的每个级别的 DOM 结构。 如果您希望测试很少被破坏,而不是每天一次,您应该使用
relative
选择器。

© www.soinside.com 2019 - 2024. All rights reserved.