2019-06-18 python day-06

今日内容:

1.selenium相关操作

2.selenium登录破解

3.爬取京东商品信息

4.破解滑动验证码的逻辑



1.selenium相关操作

    (1)搭配使用xpath

from selenium import webdriver

import time

'''

<html>

<head>

  <base href='http://example.com/' />

  <title>Example website</title>

</head>

<body>

  <div id='images'>

  <a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>

  <a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>

  <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>

  <a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>

  <a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>

  </div>

</body>

</html>

'''

driver = webdriver.Chrome(r'/Users/nadia/Downloads/chromedriver')

try:

    # 隐式等待写在get请求前

    driver.implicitly_wait(5)

    driver.get('https://doc.scrapy.org/en/latest/_static/selectors-sample1.html')

    # 显示等待写在get请求后

    html = driver.find_element_by_xpath('/html')

    print(html.tag_name)

    # 从根节点开始找任意一个节点

    div = driver.find_element_by_xpath('//div')

    print(div.tag_name)

    # 查找id为images的节点

    # div = driver.find_element_by_xpath('div[@id="images"]')

    # print(div.tag_name)

    # print(div.text)

    # 找到第一个a标签

    a = driver.find_element_by_xpath('//a')

    print(a)

    # 找到所有a标签

    a_s = driver.find_elements_by_xpath('//a')

    print(a_s)

    # 找到第一个a节点的href属性

    a = driver.find_element_by_xpath('//a').get_attribute('href')

    print(a)

    time.sleep(5)

finally:

    driver.close()

 (2)元素交互操作

-1点击,清除,搜索

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

import time

driver = webdriver.Chrome(r'/Users/nadia/Downloads/chromedriver')

try:

    driver.implicitly_wait(5)

    driver.get('https://www.jd.com/')

    input_tag =driver.find_element_by_id('key')

    input_tag.send_keys('围城')

    input_tag.send_keys(Keys.ENTER)

    time.sleep(2)

    input_tag = driver.find_element_by_id('key')

    input_tag.clear()

    input_tag.send_keys('航海王')

    button = driver.find_element_by_class_name('button')

    button.click()

    time.sleep(10)

finally:

    driver.close()

-2获取cookies

from selenium import webdriver

import time

driver = webdriver.Chrome(r'/Users/nadia/Downloads/chromedriver')

try:

    driver.implicitly_wait(10)

    driver.get('https://www.zhihu.com/explore')   

    print(driver.get_cookies())

    time.sleep(10)

finally:

    driver.close()

-3 选项卡

import time

from selenium import webdriver

browser = webdriver.Chrome(r'/Users/nadia/Downloads/chromedriver')

browser.get('https://www.baidu.com')

browser.execute_script('window.open()')

print(browser.window_handles) #get all xuanxiangka

browser.switch_to_window(browser.window_handles[1])

browser.get('https://www.taobao.com')

time.sleep(10)

browser.switch_to_window(browser.window_handles[0])

browser.get('https://www.sina.com.cn')

browser.close()

-4动作链

from selenium import webdriver

from selenium.webdriver import ActionChains

import time

driver = webdriver.Chrome()

driver.implicitly_wait(10)

driver.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')

try:

    # driver.switch_to_frame('iframeResult')

    # 切换到id为iframeResult的窗口内

    driver.switch_to.frame('iframeResult')

    # 源位置

    draggable = driver.find_element_by_id('draggable')

    # 目标位置

    droppable = driver.find_element_by_id('droppable')

    # 调用ActionChains,必须把驱动对象传进去

    # 得到一个动作链对象,复制给一个变量

    actions = ActionChains(driver)

    # 方式一: 机器人

    # 瞬间把源图片位置秒移到目标图片位置

    # actions.drag_and_drop(draggable, droppable)  # 编写一个行为

    # actions.perform()  # 执行编写好的行为

    # 方式二: 模拟人的行为

    source = draggable.location['x']

    target = droppable.location['x']

    print(source, target)

    distance = target - source

    print(distance)

    # perform:每个动作都要调用perform执行

    # 点击并摁住源图片

    ActionChains(driver).click_and_hold(draggable).perform()

    s = 0

    while s < distance:

        # 执行位移操作

        ActionChains(driver).move_by_offset(xoffset=2, yoffset=0).perform()

        s += 2

    # 释放动作链

    ActionChains(driver).release().perform()

    time.sleep(10)

finally:

    driver.close()

-5前进,后退

from selenium import webdriver

import time

driver = webdriver.Chrome(r'/Users/nadia/Downloads/chromedriver')

try:

    driver.implicitly_wait(10)

    driver.get('https://www.jd.com/')

    driver.get('https://www.baidu.com/')

    driver.get('https://www.cnblogs.com/')

    time.sleep(2)

    # 回退操作

    driver.back()

    time.sleep(1)

    # 前进操作

    driver.forward()

    time.sleep(1)

    driver.back()

    time.sleep(10)

finally:

    driver.close()

2.selenium登录破解

# 由于selenium 驱动浏览器无缓存

#如何给selenium驱动的浏览器加缓存(cookie)避免登录

from selenium import webdriver

from selenium.webdriver import ChromeOptions

import time

options = ChromeOptions()

profile_directory = r'--user-data-dir=(填写chrome存放cookie的位置)'

options.add_argument(profile_directory)

driver = webdriver.Chrome(chrome_options=options)

try:

    driver.implicitly_wait(10)

    driver.get('https://www.baidu.com/')

    # 添加用户cookies信息

    # name、value必须小写

    driver.add_cookie({"name": "BDUSS", "value": (value的值请在网页的响应头中自行获取})

    # 刷新操作

    driver.refresh()

    time.sleep(10)

finally:

    driver.close()

3.爬取京东商品信息

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

import time

def get_good(driver):

    try:


        # 通过JS控制滚轮滑动获取所有商品

        js_code = '''

            window.scrollTo(0,50000);

        '''

        driver.execute_script(js_code)

        time.sleep(2)

        #查找所有商品div

        # good_div = driver.find_element_by_class_id('J_goodList')

        good_list = driver.find_elements_by_class_name('gl-item')

        for good in good_list:

            # 商品链接

            good_link = driver.find_element_by_css_selector(' .p-img').get_attribute('href')

            # 商品名称

            good_name = driver.find_element_by_css_selector('.p-name em').text.replace("\n",'--')

            # 商品价格

            good_price = driver.find_element_by_class_name('p-price').text.replace('\n',':')

            # 评价人数

            comment_num = driver.find_element_by_class_name('p-commit').text.replace('\n',' ')

            good_content = f'''

                            商品链接:{good_link}

                            商品名称:{good_name}

                            商品价格:{good_price}

                            评价人数:{comment_num}

                            '''

            print(good_content)

        next_tag = driver.find_element_by_class_name('pn-next')     

        next_tag.click()

        time.sleep(2)

        get_good(driver)

        time.sleep(5)

    finally:

        driver.close()


if __name__ == "__main__":

    good_tag = input("请输入想查找的商品:")

    driver = webdriver.Chrome(r'/Users/nadia/Downloads/chromedriver')

    driver.implicitly_wait(10)

        # 1.往jd发送请求   

    driver.get("https://www.jd.com/")

        # 输入商品名称,并回车搜索

    input_tag = driver.find_element_by_id('key')

    input_tag.send_keys(good_tag)

    input_tag.send_keys(Keys.ENTER)

    time.sleep(2)

    get_good(driver)

4.破解滑动验证码的逻辑


滑动验证码


破解逻辑


破解示意图
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容