我正在尝试用硒构建一个机器人。问题是该网站有时会不经通知即注销我。我知道如何检测它,并且知道如何处理它。问题在于,如果服务器注销了我,则在每行之前进行检查是不合理的。这就是我可以做的:
class ...():
pos_float = [0,0]
...
def movement(self):
self.pos_float[0] += self.vel[0]
self.pos_float[1] += self.vel[1]
self.pos[0] = int(self.pos_float[0])
self.pos[1] = int(self.pos_float[1])
但是检查我是否需要重新连接每条线并不是一个好的解决方案。 我考虑过要建立一个可以一直检查是否断开连接的线程,但是在发现断开连接后重新连接到服务器之前,我不知道如何暂停主线程
答案 0 :(得分:1)
您可以在侧线程的while循环内运行检查,如果服务器断开您的连接,请停止主线程。重新连接后,请重新启动。
答案 1 :(得分:1)
您可以拥有与自己的解决方案类似的解决方案,但是您可以使用ChromeDriver
来代替为EventFiringWebDriver
创建自己的包装器。
答案 2 :(得分:0)
登出您的网站似乎超时。据我所知,您正在非生产环境中进行测试,请查看如何将time_out设置为0(不过期)。
线程解决方案太笨拙,单个非同步丢失会产生无法检测到的错误结果。
答案 3 :(得分:0)
我通过用自己的类包装ChromeDriver
来解决此问题,该类在每次操作之前检查是否已检测到断开连接。如果有人有更好的解决方案,我想听听。这是我的解决方案:
public java.util.List<WebElement> findElements(By by) throws disconnectException {
if(keepLogin) {
if(checkConnectionOver()) {
throw new disconnectException();
}
}
return driver.findElements(by);
}
public WebElement findElement(By by) throws disconnectException {
if(keepLogin) {
if(checkConnectionOver()) {
throw new disconnectException();
}
}
return driver.findElement(by);
}
public Object executeScript(String script, Object... args) throws disconnectException {
if(keepLogin) {
if(checkConnectionOver()) {
throw new disconnectException();
}
}
return driver.executeScript(script, args);
}
public void get(String url) {
driver.get(url);
}
public String getCurrentUrl() {
return driver.getCurrentUrl();
}