python—selenium个人笔记

一、问题

1、selenium3.0+,谷歌浏览器6.0+,添加了chromedriver.exe运行报错:“不安全:data”等等:

        selenium版本和google版本不一致,估计Google版本过高;火狐浏览器暂时没出现此问题,也要下载geckodriver.exe

2、从一个页面跳转到新页面后无法定位到新的元素,或者新页面元素没存入:

        到新页面后要在使用之前在原来的driver上进行转换:driver.switch_to_window(driver.window_handles[-1]

        “-1”表示最后一个页面,也就是最新的意思,可以根据handles定位到已经打开过的页面

二、实例代码

1、简单打开和输入框输入跳转

from selenium import webdriver
import time
# 打开浏览器url界面
firefox = webdriver.Firefox()
url = 'http://www.jd.com/'
firefox.get(url)
time.sleep(1)

from selenium.webdriver.common.keys import Keys        #模拟键盘操作模块

#定位到输入框元素并且自动输入内容,模拟键盘跳转

jd = firefox.find_element_by_id('key')
jd.clear()
jd.send_keys("python")

jd.send_keys(Keys.ENTER) # 模拟键盘“Enter”键

2、模拟登录实例+定位新页面元素

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

def login(url, keyword):
    jdlogin = webdriver.Firefox()
    jdlogin.get(url)

    time.sleep(1)

    # 京东页面登录时分 二维码 和 账户登录 两种,下面这句出发 账户登录 方式

    login = jdlogin.find_elements_by_tag_name('a')[4].click()   # 只要是链接或者有事件的就可以.click()例如:<a>  <a\>
    time.sleep(1)

    # 输入账户名
    jdname = jdlogin.find_element_by_id('loginname')
    jdname.clear()                                                                    #清除输入框中原来的内容
    jdname.send_keys("***********")

    # 输入密码
    jdpwd = jdlogin.find_element_by_id('nloginpwd')
    jdpwd.send_keys("**********")
    jdpwd.send_keys(Keys.ENTER)            # 模拟键盘“Enter”
    time.sleep(1)
    # 调用下面的函数
    get_main_page(jdlogin, keyword)

def get_main_page(firefox, keyword):

    firefox.switch_to_window(firefox.window_handles[-1])        #将焦点跳转到当前页面(登陆后的页面)
    jd = firefox.find_element_by_id('key')
    jd.clear()                                                                  #清除输入框中原来的内容
    jd.send_keys(keyword)
    jd.send_keys(Keys.ENTER)
    url = firefox.current_url                                        # 获取当前页面的url
    # 调用下面的函数
    get_goods(firefox)

def get_goods(firefox):
    firefox.switch_to_window(firefox.window_handles[-1])        #将焦点跳转到当前页面
    goods = firefox.find_elements_by_class_name('gl-item')     
    print(goods)
    
if __name__ == '__main__':                                             # 主函数
    url = 'https://passport.jd.com/uc/login?ltype=logout'
    login(url, "python")


3、find_element_by_css_selector用法

driver.find_element_by_css_selector()

css定位可以分为四类:idclass、其他属性、路径。

3.1 #id方式

两种方式,可以在前面加上tag名称,也可以不加

driver.find_element_by_css_selector(‘#id_value’)

driver.find_element_by_css_selector(‘tag_name#id_value’)

3.2 .class方式

两种方式,前面加上tag名称,也可以不加。如果不加tag名称时,点不能省略。

driver.find_element_by_css_selector(‘.class_value’)

driver.find_element_by_css_selector(‘tag_name.class_value’)

如果class还包含其他的tag如<em></em>,<a> </a>时可以直接索引过(‘.class_value em’)

    driver.find_element_by_css_selector(‘.class_value em’)

有的class_value比较长,而且中间有空格时,不能把空格原样写进去,那样不能识别。这时,空格用点代替,前面要加上tag_name

driver.find_element_by_css_selector('div.panel.panel-email').click()

3.3其他属性方式

两种方式,可以在前面加上tag名称,也可以不加。

driver.find_element_by_css_selector(“[attri_name=’attri_value’]”)

    driver.find_element_by_css_selector("input[type='password']").send_keys('我要自學網')

    driver.find_element_by_css_selector("[type='password']").send_keys('我要自學網')

3.4路径法

两种方式,可以在前面加上tag名称,也可以不加。注意它的层级关系使用大于号“>”。

driver.find_element_by_css_selector("form#loginForm>ul>input[type='password']").send_keys('111222333')


其他相关操作:[python爬虫] Selenium常见元素定位方法和操作的学习介绍

猜你喜欢

转载自blog.csdn.net/qq_31967985/article/details/79995555
今日推荐