使用 WebDriver 和 Selenium 在类中获取跨度

Posted

技术标签:

【中文标题】使用 WebDriver 和 Selenium 在类中获取跨度【英文标题】:Get span inside a class using WebDriver and Selenium 【发布时间】:2019-05-11 19:37:06 【问题描述】:

我试图在一个跨度内刮取一个人的名字。 这个跨度在一个类中。

按照 html

<div>
<a class="_32mo" href="https://www.facebook.com/goutham.pullela?ref=br_rs">
<span>Goutham Pullela</span>
</a>
</div>

我正在尝试使用find_elements_by_class_name,然后得到attribute,但span 不是attribute。我没有这个span 的身份证明。

contacts = browser.find_elements_by_class_name('_32mo')

for contact in contacts:
    name = str(contact.get_attribute('span'))
    print(name)

【问题讨论】:

你能提供源网址吗?这会有所帮助。 你确定你已经登录了吗? 【参考方案1】:

您可以简单地使用 CSS 选择器,然后打印 span 元素的 text 属性:

contacts = browser.find_elements_by_css_selector('._32mo span')
for contact in contacts:
    print(contact.text)

【讨论】:

当然,我投票了,但我是新来的,所以我需要 15 分来评估我的投票好吗? 嗨科迪,现在我正在努力获取链接:'href="facebook.com/goutham.pullela?ref=br_rs'【参考方案2】:
# First we login into Facebook using:

from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.get('https://www.facebook.com/')
driver.implicitly_wait(10)
email = driver.find_element_by_id("email")
email.send_keys("email@domain.tld")
passwd = driver.find_element_by_id("pass")
passwd.send_keys("MyP@$$w0rd");
passwd.send_keys(Keys.ENTER)

# Then We can search and retrieve the name list:

driver.get('https://www.facebook.com/search/283544874786/likers?ref=about')
x = driver.find_elements_by_xpath(".//a[contains(@class, '_32mo')]")
for y in x:
    print(y.text)

Goutham Pullela
Avvaru Srinivasa Rao
Sanjay Bhushan
Ayurveda
Rachit Raj Ias
Anindita Sarkar (Rimi)
Sheela Arora
Padmapriya Rajesh
Manavi Singh
Sanaya Joshi
Kritika Singh
Nikhita Singh
Revathi
Sejal Budholiya
Devi Priya
Rashi Bhatia

【讨论】:

非常感谢!【参考方案3】:

一个更简单的方法是,检查元素,然后在控制台左上角,使用箭头标记并单击 Goutham Pullela,然后您将看到它在控制台上突出显示。复制那个 xpath 并使用 name = browser.find_elements_by_xpath('[paste xpath']).text print(name)

【讨论】:

但是 xPath 是动态的、变化的并且不遵循顺序 @MarceloGazzola XPath 与 css 一样灵活。我会在答案中告诉你。【参考方案4】:

正如评论中提到的:Xpath 也非常灵活:

contacts = browser.find_elements_by_xpath("//a[@class='_32mo')]/span")

for contact in contacts:
name=contact.text
print(name)

【讨论】:

【参考方案5】:

这可以用 3 行来实现-

elements=driver.find_elements_by_xpath('.//span[@class = "_32mo"]')

for element in elements:
    print(element.text)

为什么要这样做?

上面给出的解决方案有效,尽管我更喜欢使用 xpath,因为它会获取网页上存在的同一类的跨度中的所有值,而与它的嵌套无关。

【讨论】:

以上是关于使用 WebDriver 和 Selenium 在类中获取跨度的主要内容,如果未能解决你的问题,请参考以下文章

Selenium WebDriver的使用

Selenium分离式启动Webdriver服务和浏览器

使用 selenium 和 webdriver (chrome) python OSX 在 Instagram 中填写登录表单

如何使用selenium webdriver来判断一个网页加载完毕

使用 WebDriver 和 Selenium 在类中获取跨度

使用ImageMagick和Selenium Webdriver进行自动化视觉测试