利用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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据