Selenium Webdriver元素即使使用WebDriverWait也不返回None

时间:2020-06-16 16:08:18

标签: python-3.x selenium

我有一个使用BeautifulSoup的脚本,试图在span元素中获取文本。

number_of_pages = soup.find('span', attrs={'class':'random})
print(number_of_pages.string)

,它返回像{{lastPage()}}这样的变量,这意味着它是由JS生成的。因此,然后我将脚本更改为使用Selenium,但它返回的元素不包含我需要的文本。我尝试了一个随机网站,看看它是否可以正常工作:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get("https://hoshiikins.com/") #navigates to hoshiikins.com  
spanList= browser.find_elements_by_xpath("/html/body/div[1]/main/div/div[13]/div/div[2]/div/p")      
print(spanList)    

及其返回的是:

[<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="fe20e73e-5638-420e-a8a0-a8785153c157", element="3065d5b1-f8a6-4e46-9359-87386b4d1511")>]

然后我认为这是一个与脚本运行速度有关的问题。因此,我添加了一个延迟/等待时间:

element = WebDriverWait(browser, 10).until(
    EC.presence_of_element_located((By.XPATH, "/html/body/div[1]/main/div/div[13]/div/div[2]/div/p"))
)

我什至尝试了页面的不同部分,并使用了一个类和一个ID,但没有收到任何文本。请注意,我曾尝试使用spanList.getattribute('value')spanList.text,但它们什么也不返回。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,您的变量spanList是一个Web对象,find元素函数没有返回有意义的文本。您必须再执行一步并添加.text以返回文本。您可以在打印语句中

    print(spanText.text)

如果此标记是输入元素,则需要

   print(spanText.get_attribute('value'))

这应该打印出您想要的内容

答案 1 :(得分:0)

听起来您可能对结果有误解,您为Selenium提供的代码可以做一些小改动:

driver.get("https://hoshiikins.com/")
spanList = driver.find_elements_by_xpath("/html/body/div[1]/main/div/div[13]/div/div[2]/div/p")      
for span in spanList:
    print(span.text)

返回Indivdually Handcrafted with Love, Just for You.

您正在使用find_elements_by_xpath,它与find_element_by_xpath不同,因为前者是复数(元素 s )。因此,您要做的就是将其更改为element或遍历结果集并获得元素的text属性。

相关问题