如何从Selenium中动态生成的页面中获取HTML元素?

2024-04-25 21:11:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在登录我的帐户 Figure eight

使用selenium和python,但我不能,因为页面中没有任何HTML元素,只有这些行存在。你知道吗

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta content="ie=edge" http-equiv="x-ua-compatible">
    <title>Figure Eight Contributor Portal</title>
    <link href="/favicon.ico" rel="shortcut icon" />
    <link href="//fonts.googleapis.com/css?family=Lato:100,300,400,700,900" rel="stylesheet" />
    <link href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" rel="stylesheet" />
  </head>
  <body>
    <div id="app">
    </div>
    <script src="/1.index.js?eca43d17e540e40a3231" type="text/javascript"></script>
    <script src="/index.js?eca43d17e540e40a3231" type="text/javascript"></script>
  </body>
</html>

令人惊讶的是,当我使用inspect元素时,我可以得到HTML元素。 在stackoverflow和google上搜索类似的主题,但找不到任何解决方案。 我尝试登录的代码是:

from selenium import webdriver
from selenium.webdriver.support.expected_conditions import presence_of_element_located
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver import Chrome

def sign_in(driver, url):
    driver.get(url)
    WebDriverWait(driver, 60).until(presence_of_element_located(driver.find_element_by_id('Email')))
    username = driver.find_element_by_id("Email")
    password = driver.find_element_by_id("Password")
    username.send_keys("##########")
    password.send_keys("@@@@@@@@@@")
    driver.find_element_by_name("Sign in").click()
    return True, "Success"

url = "https://contributors.figure-eight.work/login"
driver = Chrome()
result, message = sign_in(driver, url)
if result:
    print(message)

Tags: fromimportidurl元素byhtmldriver
2条回答

要将字符序列发送到电子邮件密码字段,必须为element_to_be_clickable()导入WebDriverWait,并且可以使用以下Locator Strategies

  • 使用CSS_SELECTOR

    driver.get('https://contributors.figure-eight.work/login')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='email']"))).send_keys("mohammed@awni.com")
    driver.find_element_by_css_selector("input[name='password']").send_keys("mohammed@awni.com")
    driver.find_element_by_css_selector("div.b-Login__ButtonHolder>a").click()
    
  • 使用XPATH

    driver.get('https://contributors.figure-eight.work/login')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='email']"))).send_keys("mohammed@awni.com")
    driver.find_element_by_xpath("//input[@name='password']").send_keys("mohammed@awni.com")
    driver.find_element_by_xpath("//div[@class='b-Login__ButtonHolder']/a").click()
    
  • 注意:必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 浏览器快照:

future-eight

所有元素都出现在页面上,您可以通过检查chrome或firefox页面上的任何元素来找到这些元素。你知道吗

您可以使用代码登录(已经为下面代码中的所有元素添加了XPath):

from selenium import webdriver
from selenium.webdriver.support.expected_conditions import 
presence_of_element_located
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver import Chrome



def sign_in(driver, url):
    driver.get(url)
    WebDriverWait(driver, 60).until(
    presence_of_element_located(
        driver.find_element_by_xpath("//input[@name='email']")))
    username = driver.find_element_by_xpath("//input[@name='email']")
    password = driver.find_element_by_xpath("//input[@name='password']")
    username.send_keys("##########")
    password.send_keys("@@@@@@@@@@")
    driver.find_element_by_xpath("//a[text()='Sign in']").click()
    return True, "Success"

url = "https://contributors.figure-eight.work/login"
driver = Chrome()
result, message = sign_in(driver, url)
if result:
    print(message)

相关问题 更多 >