【问题标题】:Selenium .get_attribute() is returning NoneSelenium .get_attribute() 正在返回 None
【发布时间】:2021-06-14 11:23:28
【问题描述】:

我的目标网站是https://bscscan.com/address/0xb66e947f49b6811a8bf438040d1582232d3232d7#tokentxns
this text appears when you hover the mouse over time info
当您将鼠标悬停时,我试图在here(年龄)中获取最后一次交易的确切日期,因此我需要获取'title data-original-title'属性,因为它具有日期can be seen here但是当我尝试使用此代码获取日期时,它会打印 None

data = driver.find_element_by_xpath('//*[@id="body"]/div[3]/table/tbody/tr[1]/td[3]/span').get_attribute('title data-original-title')
print(data)
    driver_path = "browser/chromedriver.exe"
    partial_website_link = "b66e947f49b6811a8bf438040d1582232d3232d7"
    final_website_link = f"https://bscscan.com/address/0x{partial_website_link}#tokentxns"
    driver = webdriver.Chrome(driver_path)
    driver.get(final_website_link)
    time.sleep(3)
    frame = driver.find_element_by_xpath('//*[@id="tokenpageiframe"]')
    driver.switch_to.frame(frame)
    
    data = driver.find_element_by_xpath('//*[@id="body"]/div[3]/table/tbody/tr[1]/td[3]/span').get_attribute('title data-original-title')
    print(data)

【问题讨论】:

  • 这里有什么问题?您可以找到该元素,但无法获取它的文本或 data-original-title 值?
  • @Prophet 嘿,我已经更新了问题。你能再检查一下吗?谢谢。
  • 你试过我的答案了吗?

标签: python selenium web-scraping xpath hover


【解决方案1】:

经过几次尝试并扩展您的问题,我想出了以下工作示例:

from selenium import webdriver

driver_path = "browser/chromedriver.exe"
driver = webdriver.Chrome(driver_path)

partial_website_link = "b66e947f49b6811a8bf438040d1582232d3232d7"
final_website_link = f"https://bscscan.com/address/0x{partial_website_link}#tokentxns"

driver.get(final_website_link)
frame = driver.find_element_by_xpath('//*[@id="tokenpageiframe"]')
driver.switch_to.frame(frame)
# For some reason the Info you want to print is in the attribute title
data = driver.find_element_by_xpath("""/html/body/div[3]/table/tbody/tr[1]/td[3]/span""").get_attribute('title')

print(data)

如果您想从第一页获取所有日期,请执行以下操作:

from selenium import webdriver

driver_path = "browser/chromedriver.exe"
driver = webdriver.Chrome(driver_path)

partial_website_link = "b66e947f49b6811a8bf438040d1582232d3232d7"
final_website_link = f"https://bscscan.com/address/0x{partial_website_link}#tokentxns"

driver.get(final_website_link)
frame = driver.find_element_by_xpath('//*[@id="tokenpageiframe"]')
driver.switch_to.frame(frame)
# The star in the Xpath is a wildcard, Note the find_elements_by_xpath instead of find_element_by_xpath
dates = driver.find_elements_by_xpath("""//*[@id="body"]/div[3]/table/tbody/tr[*]/td[3]/span""")
# Iterate over every found element
for date in dates:
    print(date.get_attribute('title'))

【讨论】:

  • 嘿,谢谢,但我现在收到此错误,您能帮帮我吗?类“WebDriver”的未解析属性引用“get_element_by_xpath”我需要导入一些东西吗?如果我执行 find_element 那么它不会返回任何内容。
  • @JosJes 我用所需的导入更新了代码
  • 不幸的是,即使 xpath 是正确的,当我打印数据时它也不会打印。有什么想法吗?
  • @JosJes 你能告诉我你上面的代码示例的实现吗?由于这个原因可能会出现错误:stackoverflow.com/questions/62664397/…
  • 我也在检查一些东西,但真的卡住了。你能再次检查我的问题吗?我已经更新了。非常感谢。
【解决方案2】:

试试这个:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.common.action_chains import ActionChains


driver_path = "browser/chromedriver.exe"
partial_website_link = "b66e947f49b6811a8bf438040d1582232d3232d7"
final_website_link = f"https://bscscan.com/address/0x{partial_website_link}#tokentxns"
driver = webdriver.Chrome(driver_path)
driver.get(final_website_link)

wait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_xpath('//*[@id="tokenpageiframe"]')))
time.sleep(1)
ages = driver.find_elements_by_xpath(`//div[@class="table-responsive" and not(@style)]//td[@class="showAge "]//span`)
latest_age = ages[0].get_attribute("title data-original-title")

hover = ActionChains(driver).move_to_element(latest_age)
hover.perform()

tool_tip = driver.find_element_by_xpath('//div[@class="tooltip-inner"]')
age = tool_tip.text
print(age)

【讨论】:

  • 尝试了一些,但仍然没有。
  • 使用上面的代码,ages 是否包含网页元素列表?
  • 是的,它确实是这样
  • 你试过latest_age = ages[0].get_attribute("title data-original-title")latest_age = ages[0].get_attribute("data-original-title")?顺便说一句,age = ages[0] age 是否包含 web 元素?
  • 好吧,我添加了将鼠标悬停在该元素上,获取工具提示并提取文本。希望现在它会起作用
【解决方案3】:

看看这是否有效:-

tableRows = driver.find_elements_by_xpath(".//table[@class='table table-hover']/tbody/tr")
for tr in tableRows:
    print(tr.find_element_by_xpath(".//td[@class='showAge ']/span[@rel='tooltip']").get_attribute("data-original-title"))

【讨论】:

    猜你喜欢
    • 2020-09-29
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    相关资源
    最近更新 更多