python - python selenium browser.quit() 方法进程安全吗?
问题描述
我正在使用多处理池运行多个浏览器。每个进程也将一遍又一遍地打开和关闭浏览器。每个进程关闭浏览器并打开新浏览器的原因是,如果不是,我正在访问的网站将在第二次访问时被验证码阻止。如果每个进程调用browser.quit()
它会影响在其他进程中运行的chrome实例吗?当我知道它们是好的 URL 时,我遇到了一些网站失败的问题。
编辑:让我进一步解释。Selenium 访问该站点,我返回 HTML 进行抓取。我在日志文件中收到的错误:
Failed While scraping
object of type 'NoneType' has no len()
硒代码示例:
def get_page(url):
browser = webdriver.Chrome(executable_path=r'chromedriver.exe')
time.sleep(2)
browser.get(url)
# verify page
if browser.current_url[-19:] == 'noResultsFound=true' or browser.current_url[-13:] == 'error404.html':
browser.quit()
return None
else:
html = browser.page_source
browser.quit()
return html
示例抓取代码:
def scrape(html):
soup = BeautifulSoup(html, 'html.parser')
search_items = soup.find('div', {'class': 'row product-grid results'})
if search_items is not None:
search_items = search_items.find_all('div', {'class': 'col-xs-12 col-xs-6 col-sm-4 col-md-3 text-center'})
for i in range(len(search_items)):
# scrape each search result
我可以访问 URL 并验证<div>
s 确实存在,但是我通过获取长度在 for 循环中失败了。我的想法是 JavaScript 在返回 page_source 之前没有完全加载到页面上,或者另一个进程调用browser.quit()
会影响其他进程。
解决方案
推荐阅读
- javascript - scrollIntoView() 导致导航栏消失,直到页面刷新
- html - 传入的参数必须是 12 个字节的单个字符串或 24 个十六进制字符的字符串
- sql - 表无法正确连接
- c# - 无法理解如何设置 time_window Google or-tools
- ruby-on-rails - 你如何在 Rails 中使用 RSpec 测试处理错误请求?
- php - 使用作曲家命令
- javascript - 我如何将 HTTP 请求发送到另一个站点并返回验证码以供客户解决?
- aws-lambda - AWS codepipeline - 如何更新 lambda 的函数代码?
- google-cloud-platform - 如何将 GCP 服务帐户 key.json 内容传递到 Terraform Cloud 而不在 VCS 中提交?
- cython - cython 教程“使用 c 库”令人困惑