在 Python 中从 Chrome 获取所有打开的网站

6 python url selenium google-chrome python-3.x

我使用的是 Windows 8.1,Python 3.6。

是否可以在最新版本的 Chrome 中获取所有当前打开的网站并将网站保存到D:/.

我尝试打开文件:

C:\Users\username\AppData\Local\Google\Chrome\User Data\Default\Current Tabs
Run Code Online (Sandbox Code Playgroud)

但是我收到一条错误消息,说该文件是在另一个程序中打开的。
还有一个名为的文件History包含打开的 URL,但它也包含像NULL.

我尝试在 python 中读取文件,但收到UndicodeDecodeError (Not sure About This Word)
然后我尝试通过以下代码打开文件:

with open('C:/Users/username/AppData/Local/Google/Chrome/User Data/Default/History',"r+",encoding='latin') as file:
    data = file.read()
    print(data)
Run Code Online (Sandbox Code Playgroud)

它奏效了。但是我在文本文件中得到了 1 或 2 个 URL,没有 URL。

也许还有另一种方式,比如导入模块。
就像是:

import chrome
url = chrome.get_url()
print(url)
Run Code Online (Sandbox Code Playgroud)

也许selenium也可以这样做。但我不知道怎么做。
也许还有另一种方法可以在 python 中读取包含所有链接的文件。

想要我想要的是它检测打开的网站,如果mywebsite.com打开超过10分钟,它会自动被阻止。系统有自己的文件:

C:\Windows\System32\drivers\etc\hosts
Run Code Online (Sandbox Code Playgroud)

它将在最后添加以下内容:

127.0.0.1 www.mywebsite.com
Run Code Online (Sandbox Code Playgroud)

该网站将不再可用。

小智 1

您可以使用此方法来存储选项卡数据并对其进行操作:

windows = driver.window_handles
Run Code Online (Sandbox Code Playgroud)

您可以使用上述方法存储窗口。

current_window = driver.current_window_handle
Run Code Online (Sandbox Code Playgroud)

此方法将为您提供当前正在处理的窗口。您可以浏览“窗口”列表并检查它是否是 current_window 以在选项卡之间导航。

driver.switch_to.window(windows[5])
Run Code Online (Sandbox Code Playgroud)

此方法将切换到所需的选项卡,但我假设您已经拥有它。

现在如何存储选项卡打开后所花费的时间?有两种方法可以做到这一点:

  1. 在内部,通过引用 pandas 数据框或列表
  2. 读取和写入文件。

首先,您需要在脚本中导入“时间”库

current_time=time.time()
Run Code Online (Sandbox Code Playgroud)

current_time 是当前时间的 int 表示。这是一个 Linux 时间戳。

在任何一种情况下,您都需要这样的结构:

data=[]
for i in range(0,len(windows)):
    data.append([  windows[i] , time.time() ])
Run Code Online (Sandbox Code Playgroud)

这将给出如下结构:

    [[window[0],1234564879],
    [window[1],1234567896],...]
Run Code Online (Sandbox Code Playgroud)

这是你错过的事情:

for i in range(0,len(data)):
   if time.time()-data[i][1] > 600  # If new timestamp minus the old one is bigger than 600 seconds
       driver.switch_to(data[i][0])
       driver.close()
Run Code Online (Sandbox Code Playgroud)

我个人的建议是,你从稳定的 API 服务开始,而不是使用 selenium 来获取你想要的任何数据。我会推荐SerpApi,因为我在那里工作。它有各种抓取工具,包括谷歌结果抓取工具,并且为新帐户提供 5000 次免费通话。