为什么 CSS_SELECTOR 总是找不到 HTML 标签?
Why won't CSS_SELECTOR locate the HTML tag all the time?
我制作了一个可以点击各种 Instagram 提示的程序,我使用 CSS_SELECTOR 来识别这些按钮并点击它们。问题是,它只是有时有效。在这些情况下
wait.until(ec.element_to_be_clickable((By.CSS_SELECTOR, ".aOOlW.bIiDR"))).click()
wait.until(ec.element_to_be_clickable((By.CSS_SELECTOR, ".aOOlW.HoLwm"))).click()
CSS_SELECTOR 工作正常,但在这种情况下
wait.until(ec.element_to_be_clickable((By.CSS_SELECTOR, "sqdOP.L3NKy.y3zKF"))).click()
它不起作用并且returns这个错误:
Traceback (most recent call last):
File "C:/Users/~/PycharmProjects/InstagramBot1/main.py", line 40, in <module>
wait.until(ec.element_to_be_clickable((By.CSS_SELECTOR, "sqdOP.L3NKy.y3zKF"))).click()
File "C:\Users\~\PycharmProjects\InstagramBot1\venv\lib\site-packages\selenium\webdriver\support\wait.py", line 89, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
Stacktrace:
Backtrace:
Ordinal0 [0x00B63AB3+2505395]
Ordinal0 [0x00AFAE41+2076225]
Ordinal0 [0x00A02498+1057944]
Ordinal0 [0x00A2CB74+1231732]
Ordinal0 [0x00A56D92+1404306]
Ordinal0 [0x00A45A2A+1333802]
Ordinal0 [0x00A55168+1397096]
Ordinal0 [0x00A458BB+1333435]
Ordinal0 [0x00A223E4+1188836]
Ordinal0 [0x00A2323F+1192511]
GetHandleVerifier [0x00CECB36+1554566]
GetHandleVerifier [0x00D94A0C+2242396]
GetHandleVerifier [0x00BF0E0B+523099]
GetHandleVerifier [0x00BEFEB0+519168]
Ordinal0 [0x00B002FD+2097917]
Ordinal0 [0x00B04388+2114440]
Ordinal0 [0x00B044C2+2114754]
Ordinal0 [0x00B0E041+2154561]
BaseThreadInitThunk [0x76BA6359+25]
RtlGetAppContainerNamedObjectPath [0x775987A4+228]
RtlGetAppContainerNamedObjectPath [0x77598774+180]
Process finished with exit code 1
我做错了什么,我怎样才能让 selenium 识别每个按钮,而不仅仅是一些按钮?
(这是我的完整代码:)
# Importing
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support import ui
from selenium.webdriver.support.ui import WebDriverWait
# Setting everything up
service = Service("\Program Files (x86)\chromedriver.exe")
# Asking Questions
RandTimeInvalid = True
while RandTimeInvalid:
try:
RandomnessTime = int(input("Select Randomness Time:"))
RandTimeInvalid = False
except ValueError:
print("'Randomness Time' must be a number!")
RandTimeInvalid = True
InstagramUsername = input("Enter Username:")
InstagramPassword = input("Enter Password:")
# Logging In
driver = webdriver.Chrome(service=service)
driver.get('https://www.instagram.com/')
wait = ui.WebDriverWait(driver, 10)
driver.maximize_window()
wait.until(ec.element_to_be_clickable((By.CSS_SELECTOR, ".aOOlW.bIiDR"))).click()
RandomnessTime = WebDriverWait(driver, (1 - RandomnessTime))
LoginUsername = ui.WebDriverWait(driver, 10).until(ec.element_to_be_clickable((By.NAME, "username"))).send_keys(InstagramUsername)
LoginPassword = ui.WebDriverWait(driver, 10).until(ec.element_to_be_clickable((By.NAME, "password"))).send_keys(InstagramPassword, Keys.ENTER)
wait.until(ec.element_to_be_clickable((By.CSS_SELECTOR, "sqdOP.L3NKy.y3zKF"))).click()
wait.until(ec.element_to_be_clickable((By.CSS_SELECTOR, ".aOOlW.HoLwm"))).click()
page = requests.get('https://www.instagram.com')
soup = BeautifulSoup(page.content, 'html.parser')
links = soup.select("span")
print(links)P[
您的代码没有任何问题,但在 .
范围内
By.CSS_SELECTOR, ".aOOlW.bIiDR"
表示您正在使用类名来定位元素,并且这些类名是动态生成的。因此,每次访问 AUT(被测应用程序)时,您都不会找到之前执行的类名,因为它们是在每次访问时随机重新生成的。
因此找不到所需的元素,由于 wait
包装器,您会看到 TimeoutException
错误。
我制作了一个可以点击各种 Instagram 提示的程序,我使用 CSS_SELECTOR 来识别这些按钮并点击它们。问题是,它只是有时有效。在这些情况下
wait.until(ec.element_to_be_clickable((By.CSS_SELECTOR, ".aOOlW.bIiDR"))).click()
wait.until(ec.element_to_be_clickable((By.CSS_SELECTOR, ".aOOlW.HoLwm"))).click()
CSS_SELECTOR 工作正常,但在这种情况下
wait.until(ec.element_to_be_clickable((By.CSS_SELECTOR, "sqdOP.L3NKy.y3zKF"))).click()
它不起作用并且returns这个错误:
Traceback (most recent call last):
File "C:/Users/~/PycharmProjects/InstagramBot1/main.py", line 40, in <module>
wait.until(ec.element_to_be_clickable((By.CSS_SELECTOR, "sqdOP.L3NKy.y3zKF"))).click()
File "C:\Users\~\PycharmProjects\InstagramBot1\venv\lib\site-packages\selenium\webdriver\support\wait.py", line 89, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
Stacktrace:
Backtrace:
Ordinal0 [0x00B63AB3+2505395]
Ordinal0 [0x00AFAE41+2076225]
Ordinal0 [0x00A02498+1057944]
Ordinal0 [0x00A2CB74+1231732]
Ordinal0 [0x00A56D92+1404306]
Ordinal0 [0x00A45A2A+1333802]
Ordinal0 [0x00A55168+1397096]
Ordinal0 [0x00A458BB+1333435]
Ordinal0 [0x00A223E4+1188836]
Ordinal0 [0x00A2323F+1192511]
GetHandleVerifier [0x00CECB36+1554566]
GetHandleVerifier [0x00D94A0C+2242396]
GetHandleVerifier [0x00BF0E0B+523099]
GetHandleVerifier [0x00BEFEB0+519168]
Ordinal0 [0x00B002FD+2097917]
Ordinal0 [0x00B04388+2114440]
Ordinal0 [0x00B044C2+2114754]
Ordinal0 [0x00B0E041+2154561]
BaseThreadInitThunk [0x76BA6359+25]
RtlGetAppContainerNamedObjectPath [0x775987A4+228]
RtlGetAppContainerNamedObjectPath [0x77598774+180]
Process finished with exit code 1
我做错了什么,我怎样才能让 selenium 识别每个按钮,而不仅仅是一些按钮?
(这是我的完整代码:)
# Importing
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support import ui
from selenium.webdriver.support.ui import WebDriverWait
# Setting everything up
service = Service("\Program Files (x86)\chromedriver.exe")
# Asking Questions
RandTimeInvalid = True
while RandTimeInvalid:
try:
RandomnessTime = int(input("Select Randomness Time:"))
RandTimeInvalid = False
except ValueError:
print("'Randomness Time' must be a number!")
RandTimeInvalid = True
InstagramUsername = input("Enter Username:")
InstagramPassword = input("Enter Password:")
# Logging In
driver = webdriver.Chrome(service=service)
driver.get('https://www.instagram.com/')
wait = ui.WebDriverWait(driver, 10)
driver.maximize_window()
wait.until(ec.element_to_be_clickable((By.CSS_SELECTOR, ".aOOlW.bIiDR"))).click()
RandomnessTime = WebDriverWait(driver, (1 - RandomnessTime))
LoginUsername = ui.WebDriverWait(driver, 10).until(ec.element_to_be_clickable((By.NAME, "username"))).send_keys(InstagramUsername)
LoginPassword = ui.WebDriverWait(driver, 10).until(ec.element_to_be_clickable((By.NAME, "password"))).send_keys(InstagramPassword, Keys.ENTER)
wait.until(ec.element_to_be_clickable((By.CSS_SELECTOR, "sqdOP.L3NKy.y3zKF"))).click()
wait.until(ec.element_to_be_clickable((By.CSS_SELECTOR, ".aOOlW.HoLwm"))).click()
page = requests.get('https://www.instagram.com')
soup = BeautifulSoup(page.content, 'html.parser')
links = soup.select("span")
print(links)P[
您的代码没有任何问题,但在
By.CSS_SELECTOR, ".aOOlW.bIiDR"
表示您正在使用类名来定位元素,并且这些类名是动态生成的。因此,每次访问 AUT(被测应用程序)时,您都不会找到之前执行的类名,因为它们是在每次访问时随机重新生成的。
因此找不到所需的元素,由于 wait
包装器,您会看到 TimeoutException
错误。