一文学会使用selenium, 并实现登录挂英语网站不掉线

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ljt735029684/article/details/80879017

本文用于快速入门或者复习selenium的webdriver但不讲解如何安装selenium以及ChromeDriver

先教一些简单功能,各函数功能在注释里

from selenium import webdriver
import time

#访问百度首页
first_url = 'http://www.baidu.com'
print("正在访问%s" % (first_url))
driver.get(first_url)

#打印网页源码
print(driver.page_source)

#访问新闻页面
second_url = 'http://news.baidu.com'
print("正在访问%s" %(second_url))
driver.get(second_url)

#回退到百度首页
print("回退到百度首页")
driver.back()

#前进到新闻页
print("前进到新闻页")
driver.forward()

#刷新当前页面
driver.refresh()

#查看当前网页url
print(driver.current_url)

#滑动进度条到最低端,使用javaScript
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
time.sleep(1)

#打开新的选项卡,模拟javaScript
driver.execute_script('window.open()')

#切换选项卡,按列表切到第几个选项卡
driver.switch_to_window(driver.window_handles[1])
driver.get('http://www.sougou.com')
time.sleep(3)

#关闭选项卡
driver.close()
time.sleep(1)
#关闭当前驱动器
driver.quit()

selenium的webdriver主要还是定位。。。定位方法有CSS定位器跟XPath或者使用id,这里不详细解释,请自行使用


学校要求挂英语网站时间达到30个小时,但是那破网站一直断。所以,咳咳。。本文简单使用不断刷新的方法保持英语网站的Cookies

#coding = utf-8

"""
    author: 贯穿真Sh
    time: 2018年5月30日21:50:10

"""
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time


def english_login():
    """使用Chrome登录高校外语教学平台
        返回值 - webdriver
    """
    #创建使用的浏览器
    driver = webdriver.Chrome()
    #登录网址
    driver.get('http://learn.unipus.cn')

    while True:
        username = input("请输入账号:")
        password = input("请输入密码:")
        
        #进行登录操作,键入相应的账号密码,定位使用XPATH
        driver.find_element_by_xpath('//*[@id="username"]').send_keys(username)
        driver.find_element_by_xpath('//*[@id="password"]').send_keys(password)
        #按下一个按钮,定位使用CSS定位器
        driver.find_element_by_css_selector('#LoginForm > table > tbody > tr:nth-child(3) > td:nth-child(2) > input').click()
        #隐式等待
        time.sleep(2)
        #若登录失败则重新登录
        try:
            error = driver.find_element_by_css_selector('body > div:nth-child(3) > div.newlogin_box > div.newlogin_boxnew > div.rightlogin_box > div.third_rightwords > span')
            if error.text == '您输入的账号/密码有错。\n或是账号已经失效。':
                print('登录失败,请重新登录')
                driver.find_element_by_xpath('//*[@id="username"]').clear()
        except:
            print('登录成功')
            return driver


def into_fresh(driver):
    #显式等待时间设置为10秒
    wait = WebDriverWait(driver, 10)
    #创建一个可点击按钮对象
    link1 = EC.element_to_be_clickable((By.CSS_SELECTOR, '#BookClassDIV > table > tbody > tr > td:nth-child(2) > ul > li:nth-child(10) > a'))
    #显示等待按钮出现,直到按钮可以被按下
    wait.until(link1).click()
    link2 = EC.element_to_be_clickable((By.CSS_SELECTOR, '#ico > ul > p:nth-child(1) > a'))
    wait.until(link2).click()
    #隐式等待2s
    time.sleep(2)
    #wait.until(EC.frame_to_be_available_and_switch_to_it(driver.window_handles[1]))    #不知用显示等待报错
    #切换选项卡
    driver.switch_to_window(driver.window_handles[1])
    link3 = EC.element_to_be_clickable((By.CSS_SELECTOR, 'body > div.box > div:nth-child(2) > ul > li:nth-child(2) > a > img'))
    wait.until(link3).click()

    #循环刷新
    while True:
        #刷新当前页面
        driver.refresh()
        #打印当前时间
        now = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
        print(now)
        time.sleep(60)

if __name__ == '__main__':
    driver = english_login()
    into_fresh(driver)

子页面frame

如果你用CSS定位器定位不到,那可能是因为在子页面即frame里, 需要切换到子页面里定位

就一句switch_to_frame。然后用完切回父节点


去除alert警告



创建,切换选项卡


猜你喜欢

转载自blog.csdn.net/ljt735029684/article/details/80879017