我尝试使用Seleniung webdriver PhantomJS在span中获取文本。我的代码是这样的:
href = driver.find_elements_by_xpath("//a[@class='_8mlbc _vbtk2 _t5r8b']")
for rt in href:
rt.click()
if href:
name = driver.find_elements_by_xpath("//*[@class='_99ch8']/span").text
# name = driver.find_element_by_xpath("//li[a[@title='nike']]/span").text
print(name)
在HTML中:
<li class="_99ch8"><a class="_4zhc5 notranslate _ebg8h" title="nike" href="/nike/">nike</a><span><span>Nobody believed a boy from Madeira would make it to the stars. Except the boy from Madeira. </span><br><a href="/explore/tags/nike/">#nike</a><span> </span><a href="/explore/tags/soccer/">#soccer</a><span> </span><a href="/explore/tags/football/">#football</a><span> </span><a href="/explore/tags/cr7/">#CR7</a><span> </span><a href="/explore/tags/cristiano/">#Cristiano</a><span> </span><a href="/explore/tags/cristianoronaldo/">#CristianoRonaldo</a><span> </span><a href="/explore/tags/mercurial/">#Mercurial</a><span> </span><a href="/explore/tags/justdoit/">#justdoit</a></span></li>
我想尝试在span内获取文字。
答案 0 :(得分:1)
您不能使用返回文本节点的XPath
表达式,因为它是selenium
的不可接受选项 - 选择器应仅返回WebDriver
元素
另请注意,li
的班级名称似乎是动态的,因此您可以改为使用子锚点的title
属性值:
driver.find_element_by_xpath("//li[a[@title='nike']]/span").text
更新
完整的代码:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://www.instagram.com/nike/')
links = driver.find_elements_by_xpath('//a[contains(@href, "/?taken-by=nike")]')
for link in links:
link.click()
wait(driver, 5).until(EC.presence_of_element_located((By.XPATH, "//div/article")))
print(driver.find_element_by_xpath("//li[a[@title='nike']]/span").text)
driver.find_element_by_xpath("//div[@role='dialog']/button").click()
更新#2
您也可以在不打开每张图片的情况下轻松抓取相同的文字:
links = driver.find_elements_by_xpath('//img')
for img in links:
print(img.get_attribute('alt'))
答案 1 :(得分:0)
我认为首先,如果您想要使用单个元素,则需要使用find_element_by_xpath()
方法而不是find_elements_by_xpath()
方法来获取元素。
如果您正在使用find_elements_by_xpath()
,那么您需要使用循环语句来打印name
变量中的所有名称。
此外,使用元素的.text
属性可以获得所需的结果。
试试这个
name = driver.find_element_by_xpath(//li[@class='_69ch8']/span).text
print(name)