复制的 XPATH 在 Selenium 中不起作用 Python
Copied XPATH doesn't work in Selenium Python
我试图抓取我学校的网站,但没有成功。我尝试了很多东西,但大多数时候我传递的 XPATH 是不正确的。 (XPATH 是从 HTML 复制的)有很多像这样的元素在单击后没有响应或者只是找不到。
我的代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def element(driver, by_x, html_element):
try:
element = WebDriverWait(driver, 5).until(
EC.presence_of_element_located((by_x, html_element))
)
return element
except:
print("Element not found")
class EduPage:
def __init__(self, name, password, edu_link):
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-logging"])
PATH = "C:\Programming Modules\Drivers\chromedriver.exe"
self.driver = webdriver.Chrome(executable_path=PATH, options=options)
self.name = name
self.password = password
self.driver.get(edu_link)
def log_in(self):
login_name = element(self.driver, By.ID, "login_Login_1e1")
login_name.send_keys(self.name)
login_pass = element(self.driver, By.ID, "login_Login_1e2")
login_pass.send_keys(self.password, Keys.RETURN)
def go_to_class(self):
online_class = element(self.driver, By.XPATH, "//*[@id='jwb98b9ff6_md']/div/div[2]")
online_class.click()
edupage = EduPage("my name", "my password", "https://gymstrop.edupage.org/login/")
edupage.log_in()
edupage.go_to_class
HTML代码(我要点击高亮元素)
失败的原因是 parent element
id attribute
是 dynamic。我建议使用以下 xpath
来识别元素..
//div[@class='userTopOnlineLesson']/a
所以你的代码会像
online_class = element(self.driver, By.XPATH, "//div[@class='userTopOnlineLesson']/a")
或以下 css 选择器。
div.userTopOnlineLesson>a.userTopBlackboard
KunduK 提供的解决方案应该有效,如果无效,我也想看看您遇到的实际 selenium 错误。
同时,请尝试将等待时间增加到 60,看看这是否与等待时间长无关
try:
element = WebDriverWait(driver, 60).until(
EC.presence_of_element_located((by_x, html_element))
)
return element
except:
print("Element not found")
我试图抓取我学校的网站,但没有成功。我尝试了很多东西,但大多数时候我传递的 XPATH 是不正确的。 (XPATH 是从 HTML 复制的)有很多像这样的元素在单击后没有响应或者只是找不到。 我的代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def element(driver, by_x, html_element):
try:
element = WebDriverWait(driver, 5).until(
EC.presence_of_element_located((by_x, html_element))
)
return element
except:
print("Element not found")
class EduPage:
def __init__(self, name, password, edu_link):
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-logging"])
PATH = "C:\Programming Modules\Drivers\chromedriver.exe"
self.driver = webdriver.Chrome(executable_path=PATH, options=options)
self.name = name
self.password = password
self.driver.get(edu_link)
def log_in(self):
login_name = element(self.driver, By.ID, "login_Login_1e1")
login_name.send_keys(self.name)
login_pass = element(self.driver, By.ID, "login_Login_1e2")
login_pass.send_keys(self.password, Keys.RETURN)
def go_to_class(self):
online_class = element(self.driver, By.XPATH, "//*[@id='jwb98b9ff6_md']/div/div[2]")
online_class.click()
edupage = EduPage("my name", "my password", "https://gymstrop.edupage.org/login/")
edupage.log_in()
edupage.go_to_class
HTML代码(我要点击高亮元素)
失败的原因是 parent element
id attribute
是 dynamic。我建议使用以下 xpath
来识别元素..
//div[@class='userTopOnlineLesson']/a
所以你的代码会像
online_class = element(self.driver, By.XPATH, "//div[@class='userTopOnlineLesson']/a")
或以下 css 选择器。
div.userTopOnlineLesson>a.userTopBlackboard
KunduK 提供的解决方案应该有效,如果无效,我也想看看您遇到的实际 selenium 错误。
同时,请尝试将等待时间增加到 60,看看这是否与等待时间长无关
try:
element = WebDriverWait(driver, 60).until(
EC.presence_of_element_located((by_x, html_element))
)
return element
except:
print("Element not found")