输出为“无法加载元素”。我也尝试使用xpath。我在页面上使用class-name尝试了不同的元素。它说同样的话。看来页面上没有任何元素。它可以使用driver.get(url)导航到其他页面。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
PATH = "C:\Program Files (x86)\chromedriver.exe"
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
driver = webdriver.Chrome(PATH, chrome_options=chrome_options)
driver.get("https://somepage/")
try:
personNumber = WebDriverWait(driver, 5).until(
EC.presence_of_element_located((By.NAME, "personNumber")))
personNumber.send_keys("XXXXXX-XXXX")
personNumber.send_keys(Keys.RETURN)
except TimeoutException:
print("Failed to load BankID-page")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "widget-link__title")))
element = driver.find_element_by_class_name("widget-link__title")
print(element.text)
except TimeoutException:
print("Failed to load element")
源代码如下所示。我无法访问它,因为源代码以某种方式动态输入了?
<div class="dashboard__widget-links-column dashboard__widget-links-column--left">
<div ng-show="!hideIfEmpty || count > 0" class="dashboard__widget dashboard__widget-link widget-link widget-link--patients" ng-class="modifiers()" label="DASHBOARD.NEW_PATIENTS" count="$ctrl.widgets.data.new_patients" loading="$ctrl.widgets.loading"
error="$ctrl.widgets.error" location="ja.app.physio.patients.list" query="filter=new_patient" type="patients">
<!---->
<div ng-if="!loading" class="widget-link__content" style="">
<div class="widget-link__icon-wrapper">
<div class="widget-link__icon"></div>
</div>
<div class="widget-link__title">Nya patienter</div>
<!---->
<!----><img ng-if="!loading && !error && count === 0" class="widget-link__completed" src="ja/images/checkmark_small.abcd2f16.svg">
<!---->
<!---->
</div>
<!---->
<!---->
<!---->
</div>
<div ng-show="!hideIfEmpty || count > 0" class="dashboard__widget dashboard__widget-link widget-link widget-link--comments widget-link--clickable" ng-class="modifiers()" label="NEW_COMMENTS" count="$ctrl.widgets.data.new_comments" loading="$ctrl.widgets.loading"
error="$ctrl.widgets.error" location="ja.app.physio.patients.list" query="filter=comments" type="comments" style="">
<!---->
<div ng-if="!loading" class="widget-link__content" style="">
<div class="widget-link__icon-wrapper">
<div class="widget-link__icon"></div>
</div>
<div class="widget-link__title">Nya kommentarer</div>
<!---->
<div ng-if="!loading && count > 0" class="widget-link__count">33</div>
<!---->
<!---->
<!---->
<div class="widget-link__click-area" ng-if="count > 0" ng-click="click()"></div>
<!---->
</div>
<!---->
<!---->
<!---->
</div>
</div>
答案 0 :(得分:0)
正如#Jortega所说,我能够使用xpath代替访问元素,并等待元素正确加载,并且不要忘记在find_element_by_xpath前面插入“驱动程序”
element = WebDriverWait(driver, 20).until(
EC.presence_of_all_elements_located((By.XPATH, xpath)))
element1 = driver.find_element_by_xpath(xpath)