【问题标题】:How can i print the value in Selenium, i am only getting <generator object <genexpr> at, and find_elements does not work我如何在 Selenium 中打印值,我只得到 <generator object <genexpr> ,而 find_elements 不起作用
【发布时间】:2022-01-24 14:08:37
【问题描述】:

我正在尝试使用 selenium 获取我添加到列表中的值并将它们打印出来。但我只得到这个:。如何打印列表中的值。

我还尝试使用 "//tr[@class= 'text3'][11]/td" 缩短 xpath,但没有成功。

如您所见,我尝试遍历列表并将其转换为文本,但它也不起作用。

这个工作范围(driver.find_elements(By.XPATH,"//table[2]/tbody/tr/td[2]/table[1]/tbody/tr/td[3]/table/tbody /tr[2]/td[position() >= last()]"))?

你们能帮帮我吗?

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.implicitly_wait(10)
website = "https://langerball.de/"
driver.get(website)

for i in range(7):
    xpath_test = "//table[2]/tbody/tr/td[2]/table[1]/tbody/tr/td[3]/table/tbody/tr[2]/td[position() >= last()]"
    a = driver.find_elements(By.XPATH, xpath_test)
    test_li = []
    test_li.append(a)
print(b.text for b in test_li)

【问题讨论】:

  • 如果我的解决方案解决了您的问题,请告诉我
  • 这段代码的主要问题是 xpath_test 在该页面上不可用,因此不会将任何内容附加到列表中。代码末尾的打印功能仅打印空列表的生成器对象

标签: python list selenium loops selector


【解决方案1】:

driver.find_elements 方法在您查找其文本值时返回一个 Web 元素列表。可以通过在 Web 元素上应用 .text 方法来接收 Web 元素文本值。
因此,您应该遍历接收到的 Web 元素列表并从列表中的每个 Web 元素中提取文本。
test_li = [] 也应该在循环之外定义。
所以你的代码可能是这样的:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.implicitly_wait(10)
website = "https://langerball.de/"
driver.get(website)
test_li = []
for i in range(7):
    xpath_test = "//table[2]/tbody/tr/td[2]/table[1]/tbody/tr/td[3]/table/tbody/tr[2]/td[position() >= last()]"
    a_list = driver.find_elements(By.XPATH, xpath_test)   
    for a in a_list:
        test_li.append(a.text)
print(b.text for b in test_li)

附言
我不确定您的其余代码:for i in range(7) 循环和xpath_test XPath 表达式

【讨论】:

  • 这仍然会产生“ at 0x7f63f16fcb30>”
  • 我看到//table[2]/tbody/tr/td[2]/table[1]/tbody/tr/td[3]/table/tbody/tr[2]/td[position() &gt;= last()] 不匹配任何元素。你想在这里做什么?
  • 谢谢,我做了一些小改动,效果很好,它需要一个更小的标志。
【解决方案2】:

成功了

test_li = []

xpath_test = "//table[2]/tbody/tr/td[2]/table[1]/tbody/tr/td[3]/table/tbody/tr[2]/td[position() <= last()]"
a_list = driver.find_elements(By.XPATH, xpath_test)   
for a in a_list:
    test_li.append(a.text)
print(test_li)

【讨论】:

    猜你喜欢
    • 2013-04-28
    • 1970-01-01
    • 2018-05-11
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    相关资源
    最近更新 更多