嗨,親愛的程式員和網路爬蟲。我已經嘗試了很多次來定位元素然后按下它,但它總是給我 selenium 錯誤。我已經使用 XPATH,類名和元素的 id 不存在所以我嘗試了多個東西,但沒有任何作用,并回傳一個錯誤。這是我要廢棄的網站鏈接。

該元素具有類選擇器標題,因此我嘗試使用類名以及該元素的 xpath 及其子元素,但不幸的是無法找到它。這是我使用的代碼。此代碼適用于其他功能,例如我找到了搜索框并搜索了按下的按鈕,它可以作業。對。它作業的地方是我一直在嘗試作業的元素。請讓我知道我的錯誤是什么,所以這是可行的,或者我可以找到它然后單擊它。實際上,我必須在網上抓取俱樂部或聯賽中所有球員的資料,所以我必須先選擇國家聯賽,然后我才能抓取資料,所以這對我來說非常重要真正能夠找到并單擊標記的元素。如果你們中的任何一個可以幫助我。謝謝。

標記元素的 XPATH
//*[@id="main"]/header/div[3]/tm-quick-select-bar//div/tm-quick-select[1]/div/div
這是我的代碼
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait
os.environ['PATH'] = r"C:/ChromeDriver"
browser = webdriver.Chrome()
browser.get("https://www.transfermarkt.us/")
element = browser.find_element(By.XPATH, '//*[@id="schnellsuche"]/input[1]')
element.send_keys("J1 League")
time.sleep(5)
# element2 = browser.find_element(By.XPATH, '//*[@id="main"]/header/div[3]/tm-quick-select-bar//div/tm-quick-select[1]/div/div[1]/strong/text()')
# element2.click()
button = wait(browser, 10).until(EC.presence_of_element_located(
(By.CLASS_NAME, 'selector-title')))
button.click()
time.sleep(10)
我得到的錯誤是瀏覽器在到達最后一個要單擊的目標元素時立即關閉
DevTools listening on ws://127.0.0.1:61330/devtools/browser/d6f23f8f-6bea-41dd-8500-08f85c9cb502
[18424:9224:0523/200949.930:ERROR:device_event_log_impl.cc(214)] [20:09:49.929] USB: usb_device_handle_win.cc:1049 Failed to read descriptor from node connection: A device attached to the system is not functioning. (0x1F)
[18424:9224:0523/200949.936:ERROR:device_event_log_impl.cc(214)] [20:09:49.935] USB: usb_device_handle_win.cc:1049 Failed to read descriptor from node connection: A device attached to the system is not functioning. (0x1F)
[18424:9224:0523/200949.951:ERROR:device_event_log_impl.cc(214)] [20:09:49.951] Bluetooth: bluetooth_adapter_winrt.cc:1075 Getting Default Adapter failed.
Traceback (most recent call last):
File "d:\WeBScraping\FreecodecampWebScrapingTutorial\selenium_tutorial_freecodecamp\scrapingtarget.py", line 18, in <module>
button = wait(browser, 10).until(EC.presence_of_element_located(
File "C:\Users\bilal\AppData\Roaming\Python\Python310\site-packages\selenium\webdriver\support\wait.py", line 89, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
Stacktrace:
Backtrace:
Ordinal0 [0x00E1B8F3 2406643]
Ordinal0 [0x00DAAF31 1945393]
Ordinal0 [0x00C9C748 837448]
Ordinal0 [0x00CC92E0 1020640]
Ordinal0 [0x00CC957B 1021307]
Ordinal0 [0x00CF6372 1205106]
Ordinal0 [0x00CE42C4 1131204]
Ordinal0 [0x00CF4682 1197698]
Ordinal0 [0x00CE4096 1130646]
Ordinal0 [0x00CBE636 976438]
Ordinal0 [0x00CBF546 980294]
GetHandleVerifier [0x01089612 2498066]
GetHandleVerifier [0x0107C920 2445600]
GetHandleVerifier [0x00EB4F2A 579370]
GetHandleVerifier [0x00EB3D36 574774]
Ordinal0 [0x00DB1C0B 1973259]
Ordinal0 [0x00DB6688 1992328]
Ordinal0 [0x00DB6775 1992565]
Ordinal0 [0x00DBF8D1 2029777]
BaseThreadInitThunk [0x76CDFA29 25]
RtlGetAppContainerNamedObjectPath [0x76F57A7E 286]
RtlGetAppContainerNamedObjectPath [0x76F57A4E 238]
uj5u.com熱心網友回復:
不確定我是否理解正確,但return以下text“美國”下方的代碼。
import time
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait
driver = webdriver.Chrome(options=options, desired_capabilities=capabilities)
# open url:
driver.get('https://www.transfermarkt.us/')
# switch to cookies frame
wait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.ID, "sp_message_iframe_575847")))
time.sleep(3)
# click "Accept" cookies button
driver.find_element(By.XPATH, '//button[@title="ACCEPT ALL"]').click()
time.sleep(3)
# go back to main frame
driver.switch_to.default_content()
# here's the trick, what you are looking for is inside a "shadow-root" DOM so to access it you need to execute the script and then use CSS selector, I don't think XPATH works here:
country = driver.execute_script("return document.querySelector('tm-quick-select-bar').shadowRoot.querySelector('div > tm-quick-select:nth-child(2) > div > div > strong')")
# print
print(country.text)
# close the driver
driver.close()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/480825.html
上一篇:如何用BeautifulSoup抓取youtube視頻描述
下一篇:網路抓取回傳無串列
