我正在抓取一个目前有两个版本的网站,当你访问该网站时,你永远不知道你会得到哪一个。出于这个原因,我不得不设置两个单独的文件来抓它。
为了简单起见,我有一个主文件来控制两个文件的运行:
attempts = 0
while attempts < 10:
try:
try:
runfile('file1.py')
except SomeException:
runfile('file2.py')
break
except:
attempts += 1
所以基本上这样可以最多尝试10次,直到网站的正确版本符合正确的刮刀文件。
这个问题是文件每次都会启动webdriver
,所以我最终可能会有几个空的浏览器堵塞机器。有没有可以关闭所有webdriver实例的命令?我无法使用driver.quit()
,因为在此伞形脚本的环境中,driver
不是可识别的变量。
我也无法在driver.quit()
或file1.py
结束时使用file2.py
,因为当file1.py
遇到错误时,它会停止运行,因此driver.quit()
命令不会被执行。我无法使用try / except
因为我的主文件无法理解file1.py
中存在错误,因此无法运行file2.py
。< / p>
答案 0 :(得分:1)
您可以在runfile
中进行try..finally阻止。
def runfile(filename):
driver = ...
try:
...
finally:
# close the webdriver
driver.quit()
答案 1 :(得分:1)
处理个别跑步者中的异常,关闭驱动程序并引发一个常见的异常,然后在调用者中处理。
在file1.py和file2.py
中button0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent myintent = new Intent(MainActivity.this,theOptionsPage.class);
startActivity(myintent);
openHappy();
}
});
您可以通过在调用者中初始化驱动程序并将驱动程序实例传递给函数而不是模块来将其分解给调用者。