Selenium 学习资料

admin / 文章 / ... / Reads: 2269

Mac安装 Selenium

安装 Selenium

pip install selenium

安装Chrome浏览器驱动chromedriver

查看已安装谷歌版本

s1

s2png

可以看到本机上的Chrome版本是 109.0.5414.87,下载对应的chromderiver

https://registry.npmmirror.com/binary.html?path=chromedriver/

下载后,将zip包解压,然后在终端处,通过mv指令将chromedriver文件移动到/usr/local/bin路径下

进入到/usr/local/bin路径下,输入指令:xattr -d com.apple.quarantine chromedriver,将chromedriver的com.apple.quarantine属性去除,避免运行时因为系统的安全机制导致chromedriver无法正常运行

xattr -d com.apple.quarantine chromedriver

在pycharm中,打开py文件,输入以下代码来校验整个selenium+webdriver环境是否正常。如果浏览器正常启动,则表示环境部署全部成功

from selenium import webdriver

driver = webdriver.Chrome()    
driver.get('http://www.baidu.com')    
driver.implicitly_wait(10)    
driver.find_element('xpath', '//*[@id="kw"]').send_keys('黄财财')    
driver.find_element('id', 'su').click()

解决python运行selenium程序执行完后,Chrome浏览器自动关闭的问题

遇到问题:

最近在学Selenium的时候遇到一个问题,当我执行完程序,浏览器自动关闭了,我在程序中也没有写driver.quit()或driver.close()方法,已检查浏览器版本和webdriver版本是相同的

from selenium import webdriver

def run_webdriver():
    options = webdriver.ChromeOptions()
    options.add_argument('--start-maximized')
    driver=webdriver.Chrome(options=options)
    driver.get('https://www.baidu.com')
    
if __name__ == '__main__':
    run_webdriver()

查找原因:

进过一番百度,查到了大致原因,在函数内执行的浏览器操作,在函数执行完毕之后,程序内所有的步骤都结束了,关于这段程序的进程也就结束了,浏览器包含在内;如果将浏览器全局后,打开浏览器不在函数内部,函数里面的程序执行完是不会关闭浏览器的。

解决方法:

方法一)设置option.add_experimental_option("detach", True)不自动关闭浏览器

from selenium import webdriver

def run_webdriver():
    options = webdriver.ChromeOptions()
    options.add_experimental_option('detach', True)  #不自动关闭浏览器
    options.add_argument('--start-maximized')#浏览器窗口最大化
    driver=webdriver.Chrome(options=options)
    driver.get('https://www.baidu.com')

if __name__ == '__main__':
    run_webdriver()

方法二)设置全局driver = '' ,在函数里global driver driver= webdriver.Chrome(),也是可以的,不会关闭

from selenium import webdriver
driver=''
def run_webdriver():
    global driver
    options = webdriver.ChromeOptions()
    options.add_argument('--start-maximized')#浏览器窗口最大化
    driver=webdriver.Chrome(options=options)
    driver.get('https://www.baidu.com')

if __name__ == '__main__':
    run_webdriver()

方法三)同方法二,设置全局变量,即把打开浏览器的操作放在函数外部,函数执行完毕,浏览器就不会关闭

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('--start-maximized')  # 浏览器窗口最大化
driver = webdriver.Chrome(options=options)
def run_webdriver(url):
    driver.get(url)

if __name__ == '__main__':
    url='https://www.baidu.com'
    run_webdriver(url)

Chrome正在受到自动软件的控制

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches",['enable-automation'])

driver = webdriver.Chrome(options=options)

反爬虫

driver = webdriver.Chrome(options=options)

driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    })
  """
})

参考资料

解决python运行selenium程序执行完后,Chrome浏览器自动关闭的问题
https://www.cnblogs.com/muxiaomu/p/16669022.html

Comments

Make a comment

Author: admin

Publish at: ...

关于作者

王硕,网名信平,十多年软件开发经验,业余架构师,熟悉 Java/Python/Go 等,喜欢读书,音乐和宅在家里。
专注于研究互联网产品和技术,提供中文精品教程。 本网站与其它任何公司及/或商标无任何形式关联或合作。
Email: xujieiata@163.com

www.ultrapower.com ,王硕的博客,专注于研究互联网产品和技术,提供中文精品教程。 本网站与其它任何公司及/或商标无任何形式关联或合作。