在遍历完所有URL后,再次打开浏览器窗口来处理失败的URL,如果还是失败将其写入2.txt文件中
时间: 2024-04-17 16:26:49 浏览: 122
要在遍历完所有URL后再次打开浏览器窗口来处理失败的URL,并将仍然失败的URL写入2.txt文件中,可以使用一个额外的列表来存储失败的URL,然后在所有任务完成后,重新处理这些失败的URL。
以下是修改后的代码示例:
```python
from concurrent.futures import ThreadPoolExecutor
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 打开URL文件
with open('url.txt', 'r') as file:
urls = file.read().splitlines()
# 定义特定的域名
specific_domains = ['4qo4li.com:9516/register?i_code=']
# 创建ChromeOptions对象
chrome_options = Options()
chrome_options.add_argument("--incognito") # 启用无痕模式
def process_url(url):
# 创建浏览器实例
driver = webdriver.Chrome(options=chrome_options) # 使用Chrome浏览器,需要下载对应的驱动并设置到环境变量中
# 构建完整的URL
full_url = 'http://' + url + '/a/index.php/54545'
# 打开浏览器并访问URL
driver.get(full_url)
# 等待页面跳转完成
driver.implicitly_wait(10) # 设置隐式等待时间,单位为秒
# 获取当前页面的URL
current_url = driver.current_url
# 判断当前页面的URL是否包含特定域名
if any(domain in current_url for domain in specific_domains):
# 写入1.txt文本文件
with open('1.txt', 'a') as file:
file.write(url + '\n')
else:
# 添加到失败的URL列表
failed_urls.append(url)
# 关闭浏览器
driver.quit()
# 创建线程池
with ThreadPoolExecutor(max_workers=10) as executor:
# 提交任务给线程池
futures = [executor.submit(process_url, url) for url in urls]
# 等待所有任务完成
for future in futures:
future.result()
# 再次处理失败的URL
failed_urls = []
for url in failed_urls:
process_url(url)
# 判断是否仍然失败,写入2.txt文件
if url in failed_urls:
with open('2.txt', 'a') as file:
file.write(url + '\n')
```
在代码中,我添加了一个名为`failed_urls`的列表,用于存储处理失败的URL。在处理每个URL时,如果判断为失败,则将该URL添加到`failed_urls`列表中。在所有任务完成后,遍历`failed_urls`列表,再次调用`process_url`函数来重新处理这些失败的URL。然后,判断是否仍然失败,如果仍然失败,则将该URL写入2.txt文件中。
希望这个修改能满足您的需求。如果还有其他问题,请随时提问。
阅读全文