当前位置: 首页 > 知识库问答 >
问题:

试图在python中使用selenium从div类中获取文本

鲜于德泽
2023-03-14

HTML div类,其中包含我希望打印的数据

<div class="gs_a">LR Binford&nbsp;- American antiquity, 1980 - cambridge.org </div>

这是我目前的代码:

from selenium import webdriver

def Author (SearchVar):

    driver = webdriver.Chrome("/Users/tutau/Downloads/chromedriver")

    driver.get ("https://scholar.google.com/")

    SearchBox = driver.find_element_by_id ("gs_hdr_tsi")

    SearchBox.send_keys(SearchVar)

    SearchBox.submit()

    At = driver.find_elements_by_css_selector ('#gs_res_ccl_mid > div:nth-child(1) > div.gs_ri > div.gs_a')

    print (At)

Author("dog")

我打印出来的都是

硒。网络驱动程序。遥远的webelement。WebElement(session=“9aa956e2bd51f510dd626f6937b01c0e”,element=“0.6506218589958-1”)

我对selenium的帮助并不陌生

共有3个答案

云景焕
2023-03-14

您正在打印元素。打印(At.text)而不是At。

金晨
2023-03-14

简介

首先,我建议css使用更快的解析器在selenium的页面_source上选择目标。

import lxml
import lxml.html

# put this below SearchBox.submit()

CSS_SELECTOR = '#gs_res_ccl_mid > :nth-child(1) > .gs_ri > .gs_a' # Define css
source = driver.page_source                                       # Get all html
At_raw = lxml.html.document_fromstring(source)                    # Convert
At = At_raw.cssselect(CSS_SELECTOR)                               # Select by CSS

解决方案1

然后,您需要从Web元素中提取text_content()并对其进行正确编码。

At = At.text_content().encode('utf-8') # Get text and encode
print At

解决方案2

如果at包含多行和Unicode,您还可以删除以下内容:

At = [l.replace(r'[^\x00-\x7F]+','') for line in At \                 # replace unicode
         for l in line.text_content().strip().encode('utf-8').splitlines() \ # Get text
               if l.strip()]                # only consider if line contains characters
print At
东郭凯捷
2023-03-14

看来你就快到了。也许,根据您共享的HTML和代码测试,您看到了所需的输出。

一旦执行了以下代码行:

At = driver.find_elements_by_css_selector ('#gs_res_ccl_mid > div:nth-child(1) > div.gs_ri > div.gs_a')

WebElement At指的是所需的元素(列表中的单个元素)。在下一步中,当您调用print(At)时,将打印位于的WebElement,如下所示:

selenium.webdriver.remote.webelement.WebElement (session="9aa956e2bd51f510dd626f6937b01c0e", element="0.6506218589189958-1")

现在,根据你的问题,如果你想提取文本LR Binford

  • text:获取元素的文本。
  • get_attribute(属性名):获取元素的给定属性或属性。

因此,您需要将代码行更改为:

print (At)

以下任何一项:

>

print(At.text)

使用get_属性(attributeName)

print(At.get_attribute("innerHTML"))

您自己的代码稍作调整:

# -*- coding: UTF-8 -*-
from selenium import webdriver

def Author (SearchVar):

    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_argument('disable-infobars')
    driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get ("https://scholar.google.com/")
    SearchBox = driver.find_element_by_name("q")
    SearchBox.send_keys(SearchVar)
    SearchBox.submit()
    At = driver.find_elements_by_css_selector ('#gs_res_ccl_mid > div:nth-child(1) > div.gs_ri > div.gs_a')
    for item in At:
        print(item.text)

Author("dog")

控制台输出:

…, RJ Marles, LS Pellicore, GI Giancaspro, TL Dog - Drug Safety, 2008 - Springer
 类似资料:
  • 我想从Page_inspect得到课文课的价格。 使用driver.find_element_by_xpath和 Web 驱动程序等待。 结果未找到 : 回溯(最后一次调用):文件“D:\project\totempop\webscraping\asrPOP.py”,第22行,rateText=WebDriverWait(driver,10)。直到(EC.presence_of_all_eleme

  • 当我执行时,它也打印和,我如何在Python中使用selenium只获取示例文本?

  • 问题内容: 我正在尝试使用Selenium WebDriver获取文本,这是我的代码。请注意,我不想使用XPath,因为在我的情况下,每次重新启动网页时ID都会更改。 我的代码: HTML: 我怎样才能解决这个问题? 问题答案: 你只想。 然后,您可以在验证 后 进行验证,不要尝试传递您 期望的 内容。

  • 我试图使用Selenium WebDriver获取文本,这是我的代码。请注意,我不想使用XPath,因为在我的情况下,每次重新启动网页时都会更改ID。 我的代码: HTML: 我怎样才能解决这个问题?

  • 问题内容: 我有以下HTML页面。我想获取特定div中的所有链接。这是我的HTML代码: 我想获取div 中存在的所有链接。所以我想要的那些链接是 这是我尝试过的Python代码 如何在Python上使用Selenium获得这些链接? 问题答案: 按照您共享的HTML来获取div 上所有链接的列表,您可以使用以下代码块: 注意 :由于您需要从 div 标记中收集所有 href 属性,因此您无需使用

  • 我正在尝试创建一个机器人,在各种TikTok帖子上留下评论,其中一些帖子需要留下一个提及,例如用户名。问题是,TikTok的注释框是一个div元素,而不是一个input元素。 首先,我知道这个StackOverflow帖子,对一些人来说,它只是说使用javascript更新div值。问题是,如果编辑代码,它将不会显示用户名下拉菜单 “用户名下拉菜单”是什么? 这是一个小菜单,上面有你想要提及的用户