分类: 文章

  • 利用Python在码上淘在线转换淘宝链接

    淘宝旗下的码上淘,说实话具体干啥我也不懂,总结起来还是为了线下推广。

    朋友在做淘宝,有转码的需求。之前他一直是手动的一条链接,一条链接的做转换,工作量很大,很浪费时间。于是需要一个工具来解决这个问题,刚好我最近也是在熟悉Python语言,这个用Python的selenium库实现起来并不难。

    更我上一个博客中用到的东西一样,同样是eclipse下搭建的Python开发环境,并没用用到pycharm。先直接上代码:

    from selenium import webdriver
    from time import sleep
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    import re
    from selenium.webdriver.common.action_chains import ActionChains
    import urllib
    import requests
    import zxing
    #from win32com.client import Dispatch  thunder
    
    chrome_driver='chromedriver.exe'
    driver = webdriver.Chrome(executable_path= chrome_driver)
    #driver.implicitly_wait(10)
    
    wait=WebDriverWait(driver, 10)
    
    driver.get(url="https://ma.taobao.com/")
    
    def ocr_zxing(filename):
        zx = zxing.BarCodeReader()
        zxdata = zx.decode(filename)
        print(filename + ":" + zxdata.parsed)
    
    def downloadfile(str):    
        "转换特定链接"
        driver.get(url="https://ma.taobao.com/web/create_by_url.htm")
        urlle = driver.find_element_by_id('inputUrl')
        urlle.clear()
        urlle.send_keys(str)
    
        try:
            submit= wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#form-url > div:nth-child(4) > div > button')))
            submit.click()
        except:                        
            print("cant find btnnext")
        
        sleep(3)
        lename = driver.find_element_by_id("inputName")
        lename.clear()
        lename.send_keys("测试题目")
        driver.find_element_by_xpath("/html/body/section/section/article/form/div/div/div[3]/div[2]/div/button").click()
        sleep(1)
    #     driver.find_element_by_xpath("/html/body/section/section/article/div/div[1]/div[2]/div[2]/div[3]/div/div[1]/div[2]/a[1]").click()
    #     input("下载后请输入  1 ")
    
        img_url = ''
        findsrc = True
    
        try:
            img_url = driver.find_element_by_css_selector("body > section > section > article > div > div.data-content.clearfix.step-three > div.success-view > div.sui-form.form-horizontal.pull-left.page-content > div.control-group.mt25 > div > div:nth-child(1) > span > img").get_attribute("src")                                
        except:   
            findsrc = False
            print("cant find btnnext")
            # 保存图片到指定路径  
        if img_url != None and findsrc :
                #保存图片数据  
            data = requests.get(img_url)
            fileurl = str.split('=')[1] + ".png"
            with open(fileurl, 'wb') as f:
                f.write(data.content)  
            ocr_zxing(fileurl)
    
            
    urlstr = ''
    
    while (input("请手动登录,登录完成后请输入  1 ") != '1'):
        sleep(2)
        urlstr = input("请输入要转换的链接,退出直接输入\'exit\'")
    while (urlstr != 'exit') :
        urlstr = input("请输入要转换的链接,退出直接输入\'exit\'")
        downloadfile(urlstr)

    功能其实也是很简单,就是借用chromedriver.exe调起chrome浏览器,打开
    https://ma.taobao.com/ (码上淘的登录界面)。这里就有一个小插曲,因为淘宝做了相应的措施,防止类似的脚本登录,所以有“滑动登录”限制,开始我尝试自己写脚本去实现这个滑动效果,但是多次尝试均失败告终,于是乎放弃,还是有点自知之明的,阿里大神不是我这等门外汉能挑战的。

    但是呢,但是我有取巧的办法。就是我不用自动登录,我用手动登录,注意这个手动登录不是简单的手动登录,因为默认情况下这个网站是在测试模式下手动也登陆不来的,不相信的可以测试一下。效果如下图

    会直接报错,这个我解决不了。下面注意见证奇迹的时候到了:

    这里我的小技巧就是我手动打开一个标签也,扫描登录淘宝,然后刷新码上淘的界面,就可以进入了。(这里是因为我的水平有限才来这一出,按理说保存cookie可以实现登录,我门外汉,不懂 也没有测试。大神可以指导一下)

    进入之后在程序的运行界面输入1,开始正式进入转链。

    这个时候就哟意思的事情来了,因为我这个只是给朋友做的小工具没有做到很完善,所有调试的时候还有很多细节问题需要解决。win10 下将二维码转换为链接的库运行出错,这个没解决。还有就是因为可以实现读取文件,保存文件的方式自动处理,而不是手动粘贴。

    这里还有个小细节,就是在编译器调试的时候,默认是智能复制一条,要是复制多条也会只是识别一条,但是打包成exe后再命令行下可以直接复制多行这个就很方便,也就是够用了。效果类似这样

    水平有限,有愿意指导的大神可以直接联系QQ:371359001

  • 使用Python抓取评书网站的小说评书

    听评书这种东西真的是上瘾!开始只是上下班路上听,后来在单位上班,也习惯带着耳机听,这样可以屏蔽掉外界的干扰,干活的效率相对要高一些。

    最近更是上瘾了,听一个小说,用的是app在线听的,但是现在的app啥都想要开一个VIP,简直了。。。穷人呢总有自己的路子,于是我就想着自己电脑下载好,然后在传到手机里。这里就要说一下现在的评书网站,有的也是需要vip,有的就是乱七八糟的投各种垃圾广告,只能说体验极差。

    回想两年前也是做过类似的是,当时就是用一个Excel文件,手动找到规律,然后依赖Excel的编辑填充功能去实现一些网址的整理,然后再统一建立迅雷批量任务下载。但是这个方法在现在已经行不通了。现在的网站的下载放盗链手段还是比较多的,需要网页的交互,链接也有时间限制,原来的方法显然已经行不通了。于是只有另辟蹊径了。

    这里我就把眼光放到了Python上了,虽然我个人会的语言是cpp,但是太笨重了,做这种不太合适,虽然我确信可以实现,但是没必要。期间也咨询请教了好几个大牛,但是可能是我语文表达能力不行,大牛只表示了爱莫能助,所以我只能自己动手,丰衣足食了。首先我们先看看迅雷下载界面(这个后加的25是因为脚本运行过程中我在忙别的事,热点切入到了脚本调用的浏览器中,误操作导致漏了一回,后来手动给补上)

    这些都很容易实现,我一个没用过Python的几个小时的百度成本加分析成本就写了一个小脚本模板,已经可以正常解析一个网站的链接了。

    from selenium import webdriver
    from time import sleep
    from win32com.client import Dispatch
    
    chrome_driver = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe'
    driver = webdriver.Chrome(executable_path= chrome_driver)
    driver.implicitly_wait(5)
    file1 = open('links.txt', 'a')
    
    #替换这里
    l = range(43521,43563)
    serialName = "G:\\迅雷下载\\评书\\白鹿原"
    ####
    for x in l:
        driver.get(url="http://www.pingshu8.com/down_%s.html" %x)
        titliename = driver.title
        driver.find_element_by_id('clickina').click()
        sleep(2)
        allHandles = driver.window_handles;
        driver.switch_to.window(allHandles[len(allHandles)-1])
        print(allHandles)
        print(titliename)
        addstr = driver.current_url
        thunder = Dispatch('ThunderAgent.Agent.1')
        thunder.AddTask(addstr, titliename, serialName)
        thunder.CommitTasks()
        print(addstr)
        file1.write(addstr)
        file1.write('n')
        m = range(1, len(allHandles) - 1)
    
        for y in m:
            print(allHandles[y])
            driver.switch_to.window(allHandles[y])
            sleep(2)
            driver.close()
            driver.switch_to.window(allHandles[0])
            print("close")
    file1.close

    懂的人自然懂了,不懂的就交vip挺好。感兴趣的可以搭一个Python开发环境,把上面的一段复制上去看看运行的结果是什么样的,这里还有几个小技巧我没有明确点出来,但是都应该是能百度到真确的答案的。说实话,百度真的挺好的,不但能找到合适的答案,还练就了我一双火眼金睛。谷歌不行,一般第一条就是你想要的,其他的都索然无味,好无趣。

    我是用eclipse开发的,以前没有用过。我是说eclipse和Python都没有用过。开发的界面如下:

    运行起来以后是这样,注意会提示:“Chrome 正受到自动测试软件的控制”

  • 自己动手之首饰的维修

    我喜欢自己动手干一些维修活路,所以总能找个理由置办各种千奇百怪的工具。今天就用到了一个一般人是用不到的工具。先亮家伙:

    这个东西叫喷火枪,是个很实用的东西。(我觉得就是一个防风打火机的大点的版本,工作时间也可以稍微长点)

    再介绍一下我今天要修的东西(修好之前没有把握能修好,就忘了拍照片,自行脑补)

    一条金链子!说到修这个,那总有个坏的原因,那锅还是家里的小朋友背,跟我没关系。

    而且这还有一个小插曲,之前确实在外边修过两次,第一是个小伙子,给我拆了两环,结果要熔到扣的时候,没把握好,被喷灯的风给吹走了,小伙子弄了个大红脸,又是拿扫帚扫,又是抖落衣服,就差要给我赔钱了,我和媳妇看那个窘迫,赶紧说不用找了,不要了。结果修完了我们给钱人家死活不要。这是第一次,没几天又断了,还是手艺不行啊 。。。。第二次,是找个号称专业的大门店去修的,也好像没顶用,一段时间下来又开了,这个也就是我 的机会了。

    好的,核心的工具喷枪是有了,镊子也自不用说,我这里多的是。唯一尴尬的是我这里没有东西能够承受高温,我没有耐火材料。就在我快要放弃的时候,突然考到了一个东西(这个图也是修好之后后补的)

    注意看里面的小石头,这个就是个最合适的耐火材料啊

    于是开火:

    中间的操作就很简单了,只需要找好位置和角度,把握好时间,用镊子扶着点,一切都水到渠成了。

    最终结果却是是修好了,但是就是有一个缺陷,有一个大疙瘩。。。。这个某该

    其实,话说回来,这个并不是我第一次用这种方法维修了。在很早很早以前,大概我初中时候暑假捉蝎子,用的是这种矿灯。

    结果有一次把灯放到三轮上的时候,给磕坏了,给外壳上搞了一个洞,当时觉得是很大的事,又没钱自己买新的灯,我就自己想了了一个自己现在都佩服自己的办法,我用用完油的圆珠笔芯当做吹筒,蜡烛当做火源,随便捡的什么塑料零件当补丁,用嘴噙着圆柱笔芯吹蜡烛,用火苗去烧补丁和灯坏的地方,结果竟然真的修好了。。。。可能我真的有当小炉匠的天赋吧…

    就看看下次啥时候能用到喷枪了,话说,电动车的很多塑料件是是阻燃的,是不能用喷枪焊接的。不要问我怎么知道的