李成笔记网

专注域名、站长SEO知识分享与实战技巧

CentOS7下使用Selenium自动登录秘诀

#晒图笔记大赛#

最近遇到一个项目,需要从平台自动爬取相关数据,但是最近的平台的数据接口加固了,除了加入了用户登录后的验证cookie以外,还加入额外的header参数的验证,而且密码被js加密后(非普通MD5加密)post到服务器,js代码已经混淆,基本上不可读,这使得普通的网络爬虫技巧全部失效。一周后,cookie失效,服务器就会提示请登录,强制客户端重新登录。这给我们自动化爬数据带来新的麻烦,要重新登录,就成为了半自动了。

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。

针对这种情况,Selenium正好可以排上用场。由于我的服务器是centos7,python2.7的环境,现整理出Selenium自动登录相关知识,供粉丝们参考,也是为了怕自己忘记,权当学习笔记吧。

1. 安装必要组件(Firefox版)


# 安装Python开发工具
yum install -y python-devel gcc

# 安装Firefox浏览器
yum install -y firefox

# 安装geckodriver(Firefox驱动)
# 下载最新版(请访问https://github.com/mozilla/geckodriver/releases 查看最新版本)
wget https://github.com/mozilla/geckodriver/releases/download/v0.33.0/geckodriver-v0.33.0-linux64.tar.gz
tar -xvzf geckodriver-*.tar.gz
mv geckodriver /usr/local/bin/
chmod +x /usr/local/bin/geckodriver  # 修改为可执行文件,tar解压后geckodriver一般为可执行文件。

# 安装Selenium
pip install selenium

2. Python自动登录示例代码(Firefox版)

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.options import Options
import time

# Firefox配置
options = Options()
options.add_argument('--headless')  # 无头模式(服务器环境)
#--headless这个非常重要,没有图形窗口,就要使用它
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')

# 初始化浏览器驱动
driver = webdriver.Firefox(
    executable_path='/usr/local/bin/geckodriver',
    options=options
)

try:
    # 打开登录页面
    login_url = "https://example.com/login"  # 替换为实际登录网址
    print("正在打开登录页面: " + login_url)
    driver.get(login_url)
    
    # 定位元素并输入凭据(需要根据实际页面调整)
    # 方法1:通过元素名称定位
    username = driver.find_element_by_name("username")  # 替换实际用户名元素名
    password = driver.find_element_by_name("password")  # 替换实际密码元素名
    #以上两个参数需要阅读html的网页代码,才能找到
    
    # 方法2:通过XPath定位(更灵活)
    # username = driver.find_element_by_xpath("//input[@id='login-username']")
    # password = driver.find_element_by_xpath("//input[@id='login-password']")
    
    username.send_keys("your_username")  # 替换实际用户名
    password.send_keys("your_password")  # 替换实际密码
    
    # 提交登录表单
    # 方法1:直接提交
    password.send_keys(Keys.RETURN)
    
    # 方法2:点击登录按钮
    # login_button = driver.find_element_by_xpath("//button[@type='submit']")
    # login_button.click()
    
    print("已提交登录信息,等待页面加载...")
    
    # 等待登录完成
    time.sleep(5)  # 根据网络情况调整
    
    # 验证登录结果
    current_url = driver.current_url
    print("当前URL: " + current_url)
    
    # 检查页面标题或特定元素
    if "dashboard" in current_url.lower() or "home" in driver.title.lower():
        print("登录成功!")
        # 截屏保存结果
        driver.save_screenshot("login_success.png")
    else:
        print("登录可能失败,检查截图")
        driver.save_screenshot("login_failed.png")
    
    # 获取登录后页面内容
    page_source = driver.page_source
    # 可添加对页面内容的检查
    
finally:
    # 关闭浏览器
    driver.quit()
    print("浏览器已关闭")

Firefox特有配置说明:

  1. 驱动设置

使用geckodriver而不是ChromeDriver,这是要却别开的,这是很容易犯的一个低级错误。

确保路径正确:executable_path='
/usr/local/bin/geckodriver'

  1. 无头模式
options = Options() options.add_argument('--headless')
  • 元素定位
  • Firefox与Chrome定位方式相同

    推荐使用XPath或CSS选择器:

    # XPath示例 
    username = driver.find_element_by_xpath("//input[@placeholder='用户名']") 
    # CSS选择器示例 
    login_button = driver.find_element_by_css_selector("button.login-btn")

    常见问题解决方案:

    1. 浏览器版本兼容问题
    # 查看Firefox版本 
    firefox --version 
    # 下载对应版本的geckodriver 
    # 访问 https://github.com/mozilla/geckodriver/releases
    1. 显式等待(推荐使用)
    from selenium.webdriver.common.by 
    import By from selenium.webdriver.support.ui 
    import WebDriverWait from selenium.webdriver.support 
    import expected_conditions as EC 
    # 等待元素出现 
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "welcome-message")) 
    )
    1. 处理证书错误
    # 忽略SSL证书错误 
    options.accept_insecure_certs = True
    1. 调整浏览器窗口大小
    driver.set_window_size(1280, 1024) # 避免响应式布局问题

    调试技巧:

    1. 首次运行时禁用无头模式:
    # options.add_argument('--headless') # 注释此行
    1. 添加详细日志:
    # 启用浏览器日志 
    options.log.level = "trace"
    1. 逐步执行:
    # 在每个步骤后暂停
    input("按Enter继续...")

    重要提示:

    实际使用时替换URL、用户名/密码和元素定位器

    测试前先手动访问目标网站,了解登录表单结构,也就是要阅读html的内容,找到相应的内容。

    考虑网站可能有反爬措施(验证码、动态加载等),如果遇到,就需要更高级的技巧处理自动化了。

    发表评论:

    控制面板
    您好,欢迎到访网站!
      查看权限
    网站分类
    最新留言