我不断收到此错误。我想选择一个用户,然后从列表中向下滚动,但我收到错误“没有这样的元素:无法定位元素:”,即使我检查过并且此 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))
如果我理解你是正确的,并且所需的按钮是模式上的“跟随按钮”,则正确的选择器是
[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
选择器。