【问题标题】:How to get the string from "chrome://downloads" page如何从“chrome://downloads”页面获取字符串
【发布时间】:2018-02-06 16:43:12
【问题描述】:

我使用Chromedriver 下载文件,然后我想解析"chrome://downloads" 以获取下载状态,但我无法获取字符串,请参考下面的代码和结果。我还检查了 Chrome 中的HTML。我可以看到<span id="name">Noto-hinted (1).zip</span>,但如果我使用view page source,我找不到字符串"Noto-hinted (1).zip"。是<span id="name" hidden="[[completelyOnDisk_]]">[[data.file_name]]</span>

import time, bs4
from selenium import webdriver

url = "https://noto-website.storage.googleapis.com/pkgs/Noto-hinted.zip"
browser = webdriver.Chrome()
browser.get(url)
time.sleep(5)
browser.get("chrome://downloads/")
time.sleep(30)
soup = bs4.BeautifulSoup(browser.page_source,"lxml")
webElemlist = soup.find('span', id='name')
print(webElemlist)
time.sleep(300)

browser.quit()

输出:

<span id="name"> </span>

【问题讨论】:

标签: python google-chrome beautifulsoup selenium-chromedriver bs4


【解决方案1】:

我将“lxml”更改为“html”,我收到如下警告消息,但仍然无法获取字符串。

警告(来自警告模块): 文件“C:\Python362\lib\site-packages\bs4__init__.py”,第 181 行 标记类型=标记类型)) UserWarning:没有明确指定解析器,因此我使用了适用于该系统的最佳 HTML 解析器(“lxml”)。这通常不是问题,但如果您在另一个系统或不同的虚拟环境中运行此代码,它可能会使用不同的解析器并表现不同。

导致此警告的代码位于文件的第 1 行。要消除此警告,请更改如下所示的代码:

BeautifulSoup(YOUR_MARKUP})

到这里:

BeautifulSoup(YOUR_MARKUP, "lxml")

【讨论】:

  • 仍然无法获取字符串
【解决方案2】:

您是否尝试从屏幕上获取下载项目? 右键单击您尝试单击的元素,然后选择“检查”。 这将打开控制台,当您将鼠标悬停在它们上方时,您可以看到页面每个元素的特定标签。

我为包裹找到了这个:

<div id="title-area">
    <a is="action-link" id="file-link" tabindex="0" role="link" hidden="" href="https://noto-website.storage.googleapis.com/pkgs/Noto-hinted.zip">Noto-hinted.zip</a>
    <span id="name">Noto-hinted.zip</span>
    <span id="tag"></span>
</div>

您需要做的就是使用 ID 获取这些标签的文本。这也适用于您下载文件后。

编辑:

test = """
<div id="title-area">
    <a is="action-link" id="file-link" tabindex="0" role="link" hidden="" href="https://noto-website.storage.googleapis.com/pkgs/Noto-hinted.zip">Noto-hinted.zip</a>
    <span id="name">Noto-hinted.zip</span>
    <span id="tag"></span>
</div>
"""
soup = BeautifulSoup(test, "lxml")

fileDiv = soup.find("span", {"id": "name"}).text

print(fileDiv)

如果上述方法不起作用,请尝试这样做:

soup = bs4.BeautifulSoup(browser.page_source,"html.parser")

【讨论】:

  • 是的,我使用右键单击并选择“检查”来获取元素的 id,所以我使用代码 'soup.find('span', id='name')' 来查找取出元素,但还是取不到字符串,字符串总是空的。
  • 您是否尝试过首先使用ID 获取div 元素?即fileDiv = soup.find("div", {"id": "title-area"}),然后在此搜索&lt;span&gt; 元素。
  • 谢谢,我试了一下,还是没有字符串。 fileDiv = soup.find("div", {"id": "title-area"}) print(fileDiv) 输出:
  • 你的代码没问题,但是我把test改成了browser.page_source,还是不能得到字符串。谢谢
猜你喜欢
  • 2011-12-19
  • 1970-01-01
  • 2010-09-15
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-04
相关资源
最近更新 更多