【问题标题】:How to get certain Tag Values如何获取某些标签值
【发布时间】:2020-12-30 13:18:32
【问题描述】:

以下 Selenium 自动化脚本可以正确打开给定的 URL,并打开查看发票选项卡,该选项卡会打开详细的发票。 我需要从详细发票中获取一些值,例如数字、日期和表格值。这些值非常嵌套以正确获取它们。单击查看发票时打开的 URL,我不知道如何抓取它或使用 selenium 继续。 代码中的元素是否类似于获取打开的详细发票页面的值的实例,还是有一些不同的方法?

代码如下:

from selenium import webdriver


driver = webdriver.Chrome(executable_path=r'D:/Chrome driver/chromedriver.exe') # Get local session(use webdriver.Chrome() for chrome) 
driver.implicitly_wait(3)

driver.get("URL") # load page from some url

driver.find_element_by_xpath("//input[@id='PNRId']").send_keys("MHUISZ")
driver.find_element_by_xpath("//input[@id='GstRetrievePageInteraction']").click()

element = driver.find_element_by_name('ViewInvoice')
element.click()

谁能指导我如何从发票页面获取值?

【问题讨论】:

  • 您好,如果您想简单地获取这些标签的值,请先找到元素。然后使用 .text。
  • 嗨,Arundeep,为了找到标签,我使用了元素来查找标签,并且确实使用了 .text 方法。但它给出了 NoSuchElementException: no such element: Unable to locate element。我想使用这个“element = driver.find_element_by_name('ViewInvoice')”元素来获取值吗?
  • 当您遇到 nosuchelement 异常时,有多种原因可能导致您无法获得它,请尝试将 driver.findbyelemet 包装在 webdriver 等待中。
  • 你想获取下一页的值。
  • element.click() 打开一个详细页面,我需要为此获取该页面的值,我想使用哪个定位器来使用元素或驱动程序?我尝试用等待包装它不起作用。

标签: python html selenium automation


【解决方案1】:

因此,请尝试等待元素可见或可点击,然后单击发票实际上会创建新的子句柄,因此您必须切换到它们。您现在所要做的就是弄清楚如何通过表格尝试查看它的 xpath。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome(executable_path=r'D:/Chrome driver/chromedriver.exe') # Get local session(use webdriver.Chrome() for chrome) 

driver.get("URL") 
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//input[@id='PNRId']"))).send_keys("MHUISZ")
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='GstRetrievePageInteraction']"))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, 'ViewInvoice'))).click()
p = driver.current_window_handle
#get first child window
chwnd = driver.window_handles
for w in chwnd:
   #switch focus to child window
   if(w!=p):
       driver.switch_to.window(w)
       break
invoiceTable = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "TableHeader")))
print(invoiceTable.find_element_by_xpath("tbody/tr[1]/td").text)
driver.quit()

【讨论】:

  • 好的,所以 element.click() 是一个新句柄,我必须打开它才能访问该窗口上的元素。谢谢,它奏效了。以类似的方式,我应该得到其他值。 diver.window_handles 是否获取所有打开的窗口?
  • 这样你就可以切换回去了。
  • 如果您需要其他人的帮助,请将答案标记为已接受。
  • 当然。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
  • 2021-07-14
  • 2017-10-09
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多