Python-硒无法获取元素

时间:2020-10-22 13:39:13

标签: selenium

输出为“无法加载元素”。我也尝试使用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 &amp;&amp; !error &amp;&amp; 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 &amp;&amp; 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>

1 个答案:

答案 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)