使用 selenium 和 Python 与网页交互的问题

时间:2021-03-20 14:52:40

标签: python selenium-webdriver

我正在尝试使用 Selenium 和 Python 来填写此网站上的输入: https://etherscan.io/address/0x7c40c393dc0f283f318791d746d894ddd3693572#readContract

代码应该打开折叠的标签编号 5 并填写输入,但我收到一个错误:

<块引用>

消息:没有这样的元素:无法定位元素: {"method":"xpath","selector":"///*[@id='readHeading5']/a"}

driver.get('https://etherscan.io/address/0x7c40c393dc0f283f318791d746d894ddd3693572#readContract')


time.sleep(5)
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))

elem = driver.find_elements_by_xpath("//input[@id='input_5_1']")
if len(elem) == 0:
    element = driver.find_element(By.XPATH,"//*[@id='readHeading5']/a")
    element.click()
    elem = driver.find_elements_by_xpath("//input[@id='input_5_1']")

elem.send_keys('Your Username')

1 个答案:

答案 0 :(得分:0)

以下代码似乎可以满足您的需求。这使用 find_element_by_id 排他性地,因为在所有情况下我们的元素 想要有一个唯一的 id 属性。

import time
from selenium import webdriver

driver = webdriver.Chrome()

driver.get('https://etherscan.io/address/0x7c40c393dc0f283f318791d746d894ddd3693572#readContract')


print('waiting for page load')
while True:
    iframe = driver.find_element_by_id("readcontractiframe")
    if iframe:
        break

    time.sleep(0.5)
print('page load complete')


driver.switch_to.frame(iframe)
section = driver.find_element_by_id('readHeading5')
if section:
    section.click()
    input = driver.find_element_by_id('input_5_1')
    if input:
        input.send_keys('Your Username')

time.sleep(10)

driver.close()