halemorning 发表于 2023-5-10 16:28:47

selenium连接已经打开的浏览器,网页刷新之后,就再也连不上了,只能从新打开浏览器

selenium连接已经打开的浏览器,网页刷新之后,就再也连不上了,只能从新打开浏览器,这种情况怎么解决

isdkz 发表于 2023-5-10 16:29:11

这种情况可能是因为浏览器会话被关闭或者被重置。可以尝试以下方法解决:

1. 使用 driver.switch_to.window(window_name) 方法切换到原始窗口,这样就可以继续使用原始窗口进行操作。

2. 如果原始窗口已经关闭,可以使用 driver.window_handles 方法获取所有窗口句柄,然后切换到需要的窗口。

3. 如果以上方法都无法解决问题,可以尝试使用 driver.quit() 方法关闭浏览器会话,然后重新打开浏览器并连接到原始窗口。

希望以上方法能够帮助你解决问题。

halemorning 发表于 2023-5-10 16:37:04

isdkz 发表于 2023-5-10 16:29
这种情况可能是因为浏览器会话被关闭或者被重置。可以尝试以下方法解决:

1. 使用 driver.switch_to.windo ...

大佬,我想在不关闭浏览器的前提下,重新连接上,刷新网页后,第一种方法不太懂

isdkz 发表于 2023-5-10 16:45:51

halemorning 发表于 2023-5-10 16:37
大佬,我想在不关闭浏览器的前提下,重新连接上,刷新网页后,第一种方法不太懂

我明白你的需求了。在Selenium中,一旦你的浏览器页面刷新或者导航到其他页面,你的Selenium实例依然与浏览器保持连接,所以理论上不需要重新连接。但如果你遇到了问题,可能是因为某些元素或者状态在刷新后已经不再存在。

对于你提到的第一种方法,让我解释一下: driver.switch_to.window(window_name) 这个方法是用来在多个窗口之间进行切换的。在这里, window_name 是你要切换到的窗口的名字。你可以通过 driver.window_handles 来获取当前所有打开的窗口的句柄,然后在这些窗口之间切换。举个例子,如果你想切换到第一个打开的窗口,你可以这样做:

driver.switch_to.window(driver.window_handles)


然而,如果你只是在同一个窗口里刷新了页面,你其实不需要进行窗口切换。刷新页面可能会导致一些元素无法找到,这时你需要重新定位这些元素。

如果你的问题是关于重新连接已打开的浏览器,Selenium在设计上没有提供这个功能。Selenium的WebDriver是设计用来控制一个新的浏览器会话的,它并不支持连接到一个已经存在的浏览器会话。如果你关闭了你的Python脚本但浏览器仍然打开,那么你的Selenium会话会丢失,你不能重新连接到那个会话。

如果你的需求是在浏览器刷新后继续操作,你可以在刷新后重新定位你需要的元素并进行操作。你可能需要使用 time.sleep() 或者WebDriverWait来等待页面加载完成。

halemorning 发表于 2023-5-10 16:55:12

isdkz 发表于 2023-5-10 16:45
我明白你的需求了。在Selenium中,一旦你的浏览器页面刷新或者导航到其他页面,你的Selenium实例依然与浏 ...

我明白了,大佬,如果判断一个字符串在网页源码中出现的次数 ,应该怎么写呢
if '字符串' in driver.page_source:
我现在只会判断是否出现,不会找出现的次数

isdkz 发表于 2023-5-10 16:57:23

halemorning 发表于 2023-5-10 16:55
我明白了,大佬,如果判断一个字符串在网页源码中出现的次数 ,应该怎么写呢
if '字符串' in driver.pag ...

你可以使用Python的count()函数来计算字符串在网页源码中出现的次数。这个函数会返回指定子字符串在字符串中出现的次数。下面是一个例子:

source = driver.page_source
count = source.count('你的字符串')
print(count)


这段代码会打印出 '你的字符串' 在网页源码中出现的次数。记得把 '你的字符串' 替换成你要搜索的实际字符串。

halemorning 发表于 2023-5-10 17:20:50

isdkz 发表于 2023-5-10 16:57
你可以使用Python的count()函数来计算字符串在网页源码中出现的次数。这个函数会返回指定子字符串在 ...

比如说一个代码 隔指定时间运行,而且在这个时间内还不影响其余代码执行,应该用什么,举例来说 技能1CD是10秒,想每隔10秒重复执行,但是在这10秒内还想执行别的技能

isdkz 发表于 2023-5-10 17:25:17

halemorning 发表于 2023-5-10 17:20
比如说一个代码 隔指定时间运行,而且在这个时间内还不影响其余代码执行,应该用什么,举例来说 技能1CD ...

你可以使用 Python 的多线程或者异步编程来解决这个问题。

举个例子,你可以使用threading模块来创建一个新的线程来执行你的技能1,这样主线程就可以在技能1执行的同时执行其他任务。以下是一个简单的示例:

import threading
import time

def skill1():
    while True:
      print('技能1执行')
      time.sleep(10)# 休眠10秒

def other_skills():
    # 执行其他技能的代码
    pass

# 创建并启动技能1的线程
t1 = threading.Thread(target=skill1)
t1.start()

# 在主线程中执行其他技能
other_skills()


在这个例子中, skill1函数会在一个新的线程中无限循环执行,每次执行后休眠10秒。 other_skills函数则会在主线程中执行。

需要注意的是,Python 的多线程并不适合执行计算密集型任务,因为 GIL(Global Interpreter Lock)的存在会导致即使在多核 CPU 上,Python 也只能同时执行一个线程。如果你的技能1或其他技能是计算密集型的,那么可能需要使用多进程( multiprocessing模块)或者异步编程( asyncio模块)。

另外,不管是多线程还是多进程,都需要注意线程安全或进程安全的问题,确保在多个线程或进程之间正确地共享和操作数据。

Axiujiu 发表于 2023-5-12 09:00:05

感激分享,认真学习。
页: [1]
查看完整版本: selenium连接已经打开的浏览器,网页刷新之后,就再也连不上了,只能从新打开浏览器