解决Pycharm使用 selenium 打开网页后闪退的方法

用pycharm运行模拟登录QQ邮箱打开chrome浏览器后,浏览器自动退出。代码如下

from selenium import webdriver
from selenium.common.exceptions import TimeoutException  # 超出时长
from selenium.webdriver.common.by import By   # 查找元素
from selenium.webdriver.support import expected_conditions as EC  # 元素是否加载完毕
from selenium.webdriver.support.ui import WebDriverWait  # 页面等待

from configparser import ConfigParser  # 读取ini文件

cfg = ConfigParser()
r = cfg.read('ningzhi.ini')   # 这个ningzhi.ini是我自己的文件,目的就是防止账号密码在代码中泄露,大家在模仿的时候可以自己创建这个文件(后缀为ini文件)
'''文件内容:
[user]
user:账号
[password]
password:密码
'''
user = cfg.get('user','user')
password = cfg.get('password','password')


class Login_QQ:
    def __init__(self):
        self.driver = webdriver.Edge()
        self.driver.get("https://mail.qq.com/")
        self.wait = WebDriverWait(self.driver, 10)

    def search(self):
        try:
            self.driver.switch_to.frame('login_frame')   # 进入iframe  方法一
            # 找到iframe  通过iframe进行点击
            # login_iframe = self.wait.until(EC.presence_of_element_located((By.ID,'login_frame')))
            # # 进入新的页面进行点击   方法二
            # self.driver.switch_to.frame(login_iframe)
            # 获取账号密码登陆按钮
            # self.wait.until(EC.presence_of_element_located((By.XPATH,'//*[@id="switcher_plogin"]'))).click()
            # 获取账号输入框
            self.wait.until(EC.presence_of_element_located((By.ID, 'u'))).send_keys(user)
            # 获取密码输入框
            self.wait.until(EC.presence_of_element_located((By.ID, 'p'))).send_keys(password)
            # 获取登陆按钮,并点击
            self.wait.until(EC.presence_of_element_located((By.ID, 'login_button'))).click()



        except TimeoutException:
            return self.search()


if __name__ == '__main__':
    spider = Login_QQ()
    spider.search()



运行环境:

pycharm版本:2021.3

python版本:3.10

分析:

1、我首先检查Chrome浏览器驱动与浏览器版本是否匹配,检查后发现完全匹配  ,这里我排除了驱动的问题

2,接下来我又改用Edge浏览器与浏览器驱动,发现还是闪退,这里我又排除浏览器的问题

3,既然浏览器和驱动都没有问题,那就只剩下代码和pycharm问题

解决方案

经过我反复测试给出了两种解决方案:

方案一:

在代码的最下方加一个死循环

if __name__ == '__main__':
    spider = Login_QQ()
    spider.search()

while True:
    pass

方案二:

降selenium版本

我挑了4.4.3发现解决了问题,所以也就没有再试其他的版本,也许其他的低版本也可以解决问题。

pip install selenium==4.4.3

闲聊:


也许这个chrome自动退出的问题其实并不是个问题,代码成功运行结束,浏览器关闭,可能在selenium4.7.2版本上就是这样运行的,而低版本的selenium在代码运行完成之后就不会自动关闭浏览器,目前来说我比较喜欢后者,所以选择了安装4.4.3。

希望可以帮助到遇到和我一样问题的小伙伴,感谢阅读!
 

 

你可能感兴趣的:(pycharm,selenium,python)