简体   繁体   English

无法使用 Selenium 中 Xpath 的查找元素来定位元素方法?

[英]Unable to locate element method using find element by Xpath in Selenium?

I want to type 0.5 into the "mintMultiple: Input".我想在“mintMultiple: Input”中输入 0.5。 I have tried finding element by Xpath using this code:我尝试使用以下代码通过 Xpath 查找元素:

import numpy as np
import pandas as pd
from bs4 import BeautifulSoup as soup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time 

driver = webdriver.Chrome(executable_path=r'C:\Users\Main\Documents\Work\Projects\Scraping Websites\extra\chromedriver')

my_url = "https://etherscan.io/address/0x6eed5b7ec85a802428f7a951d6cc1523181c776a#writeContract"

driver.get(my_url)
time.sleep(2)
your_input = driver.find_element_by_xpath(r'//input[@id="input_payable_3_mintMultiple"]')

However, I get this Error, I've tried using a delay and not using a delay as suggested by other sources, but I get the same error.但是,我得到了这个错误,我尝试使用延迟而不是使用其他来源建议的延迟,但我得到了同样的错误。

NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//input[@id="input_payable_3_mintMultiple"]"}
  (Session info: chrome=96.0.4664.45)

This shows the Xpath is correct as it highlighted in yellow in the HTML.这表明 Xpath 是正确的,因为它在 HTML 中以黄色突出显示。

https://etherscan.io/address/0x6eed5b7ec85a802428f7a951d6cc1523181c776a#writeContract https://etherscan.io/address/0x6eed5b7ec85a802428f7a951d6cc1523181c776a#writeContract 在此处输入图像描述

This is because the input is hidden within the drop-down tab and does not show up under the HTML.这是因为输入隐藏在下拉选项卡中,不会显示在 HTML 下。 In order for the element to be interactable, you must first click on the drop down tab.为了使元素可交互,您必须首先单击下拉选项卡。 Add the following line of code before "your_input" variable:在“your_input”变量之前添加以下代码行:

driver.find_element_by_xpath("//*[@id="heading3"]/a").click() #dropdown tab

Furthermore to complete the code:此外要完成代码:

your_input.click()
your_input.send_keys("0.5")

The element is within an iframe .该元素位于iframe内。 So you have to switch to the frame and you can use the following Locator Strategies :所以你必须切换到框架,你可以使用以下定位器策略

driver.get("https://etherscan.io/address/0x6eed5b7ec85a802428f7a951d6cc1523181c776a#writeContract")
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button#btnCookie"))).click()
WebDriverWait(driver, 5).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe#writecontractiframe")))
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.LINK_TEXT, "3. mintMultiple"))).click()
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#input_payable_3_mintMultiple"))).send_keys("0.5")
  • Note : You have to add the following imports:注意:您必须添加以下导入:

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

薄荷多

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM