Selenium 找不到我的元素
Selenium will not find my elements
我有个项目选择了Selenium打开1-5links。它停在第 3 link。我对以前成功的请求采用了相同的方法。在我的控制台中脚本继续 运行 之前,我允许了 17 秒并观察页面加载。我只是不确定为什么它找不到这个 link,我希望这是我忽略的东西...
from selenium import *
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import csv
import time
username = "xxxxxxx"
password = "xxxxxxx"
driver = webdriver.Firefox()
driver.get("https://tm.login.trendmicro.com/simplesaml/saml2/idp/SSOService.php")
assert "Trend" in driver.title
elem1 = driver.find_element_by_class_name("input_username")
elem2 = driver.find_element_by_class_name("input_password")
elem3 = driver.find_element_by_id("btn_logon")
elem1.send_keys(username)
elem2.send_keys(password)
elem3.send_keys(Keys.RETURN)
time.sleep(7)
assert "No results found." not in driver.page_source
elem4 = driver.find_element_by_css_selector("a.float-right.open-console")
elem4.send_keys(Keys.RETURN)
time.sleep(17)
elem5 = driver.find_element_by_tag_name("a.btn_left")
elem5.send_keys(Keys.RETURN)
原因之一是 elem5 正在按标签名称查找元素,但您传递给它的是 css 标签。 "a.btn_left" 不是 html 标签名,因此您的脚本实际上永远找不到它,因为它根本不存在于 dom.
中
您要么需要通过 css_selector 找到它,要么通过 Xpath 更好。如果你想让它尽可能可靠和更多的未来证据,我总是尝试在可能的情况下使用 Xpath 在页面上找到至少有 2 个描述符的元素。
改变这个:
elem5 = driver.find_element_by_tag_name("a.btn_left")
为此:
elem5 = driver.find_element_by_css_selector("a.btn_left")
你几乎永远不会使用 tag_name,主要是因为它总是会检索你传递给它的第一个标签,所以 "a" 总是会找到第一个 link 并点击它,然而你的不存在。
我最终用这段代码解决了这个问题。我将时间增加到 20 秒,信不信由你,我确实尝试了 css 的查找,我实际上离开了 a.btn_left,并循环遍历所有元素,其中 none 有效,幸运的是,我可以通过选项卡和按键功能访问,所以现在可以使用了。
time.sleep(20)
driver.get("https://wfbs-svc-nabu.trendmicro.com/wfbs-svc/portal/en/view/cm")
elem5 = driver.find_element_by_link_text("Devices")
elem5.send_keys(Keys.ENTER)
我有个项目选择了Selenium打开1-5links。它停在第 3 link。我对以前成功的请求采用了相同的方法。在我的控制台中脚本继续 运行 之前,我允许了 17 秒并观察页面加载。我只是不确定为什么它找不到这个 link,我希望这是我忽略的东西...
from selenium import *
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import csv
import time
username = "xxxxxxx"
password = "xxxxxxx"
driver = webdriver.Firefox()
driver.get("https://tm.login.trendmicro.com/simplesaml/saml2/idp/SSOService.php")
assert "Trend" in driver.title
elem1 = driver.find_element_by_class_name("input_username")
elem2 = driver.find_element_by_class_name("input_password")
elem3 = driver.find_element_by_id("btn_logon")
elem1.send_keys(username)
elem2.send_keys(password)
elem3.send_keys(Keys.RETURN)
time.sleep(7)
assert "No results found." not in driver.page_source
elem4 = driver.find_element_by_css_selector("a.float-right.open-console")
elem4.send_keys(Keys.RETURN)
time.sleep(17)
elem5 = driver.find_element_by_tag_name("a.btn_left")
elem5.send_keys(Keys.RETURN)
原因之一是 elem5 正在按标签名称查找元素,但您传递给它的是 css 标签。 "a.btn_left" 不是 html 标签名,因此您的脚本实际上永远找不到它,因为它根本不存在于 dom.
中您要么需要通过 css_selector 找到它,要么通过 Xpath 更好。如果你想让它尽可能可靠和更多的未来证据,我总是尝试在可能的情况下使用 Xpath 在页面上找到至少有 2 个描述符的元素。
改变这个:
elem5 = driver.find_element_by_tag_name("a.btn_left")
为此:
elem5 = driver.find_element_by_css_selector("a.btn_left")
你几乎永远不会使用 tag_name,主要是因为它总是会检索你传递给它的第一个标签,所以 "a" 总是会找到第一个 link 并点击它,然而你的不存在。
我最终用这段代码解决了这个问题。我将时间增加到 20 秒,信不信由你,我确实尝试了 css 的查找,我实际上离开了 a.btn_left,并循环遍历所有元素,其中 none 有效,幸运的是,我可以通过选项卡和按键功能访问,所以现在可以使用了。
time.sleep(20)
driver.get("https://wfbs-svc-nabu.trendmicro.com/wfbs-svc/portal/en/view/cm")
elem5 = driver.find_element_by_link_text("Devices")
elem5.send_keys(Keys.ENTER)