我單擊頁面上的特定按鈕,但由于某種原因,有一個按鈕我無法單擊,即使它的位置與我可以單擊的其他類似元素完全相同。
您會注意到下面的代碼,它打開一個頁面,然后單擊以訪問另一個頁面,執行此步驟,因為只有這樣您才能被重定向到具有//int.
import datetime
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
with open('my_user_agent.txt') as f:
my_user_agent = f.read()
headers = {
'User-Agent': my_user_agent
}
options = Options()
options.set_preference("general.useragent.override", my_user_agent)
options.set_preference("media.volume_scale", "0.0")
options.page_load_strategy = 'eager'
driver = webdriver.Firefox(options=options)
today = datetime.datetime.now().strftime("%Y/%m/%d")
driver.get(f"https://int.soccerway.com/matches/{today}/")
driver.find_element(by=By.XPATH, value="//div[contains(@class,'language-picker-trigger')]").click()
time.sleep(3)
driver.find_element(by=By.XPATH, value="//li/a[contains(@href,'https://int.soccerway.com')]").click()
time.sleep(3)
try:
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//a[contains(@class,'tbl-read-more-btn')]")))
driver.find_element(by=By.XPATH, value="//a[contains(@class,'tbl-read-more-btn')]").click()
time.sleep(0.1)
except:
pass
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[@data-exponload='']//button[contains(@class,'expand-icon')]")))
for btn in driver.find_elements(by=By.XPATH, value="//div[@data-exponload='']//button[contains(@class,'expand-icon')]"):
btn.click()
time.sleep(0.1)

我嘗試btn.location_once_scrolled_into_view在每次單擊之前添加以確保按鈕正確位于單擊位置,但問題仍然存在。
我還嘗試使用此處提到的選項:

編輯2:
如果您正常打開瀏覽器或沒有我在代碼中輸入的設定,橙色的元素已加載已展開,但使用我需要使用的設定,它們不會展開。所以請使用我在代碼中使用的設定,以便頁面打開時相同。
uj5u.com熱心網友回復:
您在這里缺少的是將命令包裝在回圈中,用try-except塊打開這些部分。
以下代碼有效。我試過跑步是幾次。
import datetime
import time
from selenium import webdriver
from selenium.webdriver import DesiredCapabilities
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
options = Options()
options.add_argument("start-maximized")
caps = DesiredCapabilities().CHROME
caps["pageLoadStrategy"] = "eager"
webdriver_service = Service('C:\webdrivers\chromedriver.exe')
driver = webdriver.Chrome(service=webdriver_service, options=options, desired_capabilities=caps)
wait = WebDriverWait(driver, 10)
today = datetime.datetime.now().strftime("%Y/%m/%d")
driver.get(f"https://int.soccerway.com/matches/{today}/")
wait.until(EC.element_to_be_clickable((By.XPATH, "//div[contains(@class,'language-picker-trigger')]"))).click()
time.sleep(5)
wait.until(EC.element_to_be_clickable((By.XPATH, "//li/a[contains(@href,'https://int.soccerway.com')]"))).click()
time.sleep(5)
try:
wait.until(EC.element_to_be_clickable((By.XPATH, "//a[contains(@class,'tbl-read-more-btn')]")))
driver.find_element(By.XPATH, "//a[contains(@class,'tbl-read-more-btn')]").click()
time.sleep(0.1)
except:
pass
wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@data-exponload='']//button[contains(@class,'expand-icon')]")))
for btn in driver.find_elements(By.XPATH, "//div[@data-exponload='' and not(contains(@class,'status-playing'))]//button[contains(@class,'expand-icon')]"):
btn.click()
time.sleep(0.1)
UPD
我們只需要打開封閉的元素。已經打開的部分應保持打開狀態。在這種情況下,單擊將始終有效而不會引發例外。為此,我們只需要添加此類指示 - 單擊不在當前播放狀態部分內的按鈕。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/523826.html
