find_elements_by_xpath仅在某些代码行返回空值



这是我的第一个问题,如果有什么需要修改的,请告诉我:)

我正试图使用Selenium Webdriver来获取所有"取消关注"的列表。按钮在特定的GitHub '追随者'标签https://github.com/toxtli?page=1&tab=followers,使用以下代码:

from selenium import webdriver
import time
import sys
from importlib import reload
reload(sys)
driver = webdriver.Firefox()
driver.get("http://github.com/login")
username = driver.find_element_by_id("login_field")
password = driver.find_element_by_id("password")
username.send_keys("my_GH_username")
time.sleep(1)
password.send_keys("my_GH_password")
time.sleep(1)
login_form = driver.find_element_by_xpath("//input[@value='Sign in']")
time.sleep(1)
login_form.click()
time.sleep(1)
prepend = ["toxtli"]

for user in prepend:
for t in range(1, 3):
string = "https://github.com/{}?tab=followers&page={}".format(user, t)
driver.get(string)
time.sleep(1)
unfollow_button = driver.find_elements_by_xpath('//*[@value="Unfollow"]')
print(unfollow_button)
time.sleep(1)
driver.close()

然而,无论我如何尝试find_elements_by_xpath函数将返回一个空列表[],而我希望找到几个匹配,就像这里的第523行一样:

取消关注的HTML代码我要阅读

请注意,如果我尝试使用另一行,函数似乎可以正常工作。,例如替换下面的代码以找到">span"第515行:

unfollow_button = driver.find_elements_by_xpath('//*[@class="d-table-cell v-align-middle lh-condensed"]')

为什么会发生这种情况,我该如何修复它?谢谢你!

我尝试了您的代码(感谢您添加登录块),使用我的用户名/pw,我得到了列表中返回的所有元素。我不打算把它们都打印出来,但我会在下面给你看一些已经返回的。唯一的区别是我用的是Chrome,而不是Firefox。

[<selenium.webdriver.remote.webelement.WebElement (session="d10763477be39488bf3ed4c4aaae278a", element="b306a8a3-1b31-4ec3-b7b7-e141cdd5497f")>, <selenium.webdriver.remote.webelement.WebElement (session="d10763477be39488bf3ed4c4aaae278a", element="1e5d4b03-104f-4af0-9068-3e30ba19dee0")>, <selenium.webdriver.remote.webelement.WebElement (session="d10763477be39488bf3ed4c4aaae278a", element="567e5d03-6d93-4a01-ac74-1fa7c6e9977f")>, <selenium.webdriver.remote.webelement.WebElement (session="d10763477be39488bf3ed4c4aaae278a", element="028d8212-80cb-4833-aa38-18b9fcb60ab4")>, <selenium.webdriver.remote.webelement.WebElement (session="d10763477be39488bf3ed4c4aaae278a", element="89205c40-9f5f-4d97-89da-621633b14276")>, <selenium.webdriver.remote.webelement.WebElement (session="d10763477be39488bf3ed4c4aaae278a", element="23431ba1-f5ed-41cc-8f1e-e7912e98864a")>, <selenium.webdriver.remote.webelement.WebElement (session="d10763477be39488bf3ed4c4aaae278a", element="6cf602d9-3f28-4593-aac6-83a8cce5edb4")>, <selenium.webdriver.remote.webelement.WebElement (session="d10763477be39488bf3ed4c4aaae278a", element="fccbd345-8090-456a-9604-7af8dc853f9d")>, <selenium.webdriver.remote.webelement.WebElement (session="d10763477be39488bf3ed4c4aaae278a", element="4afec6fe-0193-4b39-b710-c4080380247b")>, <selenium.webdriver.remote.webelement.WebElement (session="d10763477be39488bf3ed4c4aaae278a", element="0e8f6379-ce1f-4369-9303-f24e1a570ba3")>, <selenium.webdriver.remote.webelement.WebElement (session="d10763477be39488bf3ed4c4aaae278a", element="81705790-8358-4dbe-a12c-7b56c3938d7a")>, <selenium.webdriver.remote.webelement.WebElement (session="d10763477be39488bf3ed4c4aaae278a", element="0fe277cb-d52f-48de-9b31-f9a41d4edc78")>, <selenium.webdriver.remote.webelement.WebElement (session="d10763477be39488bf3ed4c4aaae278a", element="906f27b3-a6a7-4833-9647-b978bb956091")>, <selenium.webdriver.remote.webelement.WebElement (session="d10763477be39488bf3ed4c4aaae278a", element="303ce9a1-d143-4f9b-b328-1fbd188435e8")>, <selenium.webdriver.remote.webelement.WebElement...
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
driver_path = './geckodriver' #Firefox Executable path
driver = webdriver.Firefox(executable_path=driver_path)
url = "https://github.com/toxtli?page=1&tab=followers" # tesing only for one url
driver.get(url)
sleep(2)
# It will get all unfollow buttons but we need only the ones which are visable so we can filter it
unfollow_btns = driver.find_elements(By.XPATH, "//form//input[@value='Unfollow' and @type='submit']")
for btn in unfollow_btns:
if btn.is_displayed(): # Checks if unfollow button is displayed
# Do somthing
print("We Found Unfollow Btn")