当前位置: 首页 > news >正文

使用python selenium webdriver模拟浏览器

  selenium是进行web自动化测试的一个工具,支持C,C++,Python,Java等语言,他能够实现模拟手工操作浏览器,进行自动化,通过webdriver驱动浏览器操作,我使用的是chrome浏览器,下载chrome  webdriver 放到python的安装目录。

参考连接:

https://pypi.python.org/pypi/selenium

http://selenium-python.readthedocs.io/api.html

http://www.cnblogs.com/fnng/p/3160606.html

from selenium import webdriver
import time
import string
import datetime


def usage():
    print("*********************************************************************")
    print("欢迎使用Amazone差评神器,Enover保留版权,作者:Anker 日期:2016-12-18")
    print("*********************************************************************")

def genSearchDate():
    now = datetime.datetime.now()
    print("当前的日期是:%s/%s/%s" % (now.day, now.month, now.year%2000))

    #计算当前月的的日期范围  
    dayarr = []
    if now.day <= 10 :
        dayarr = [10,1]
    elif now.day/10 <= 2:
        dayarr = [now.day,10,1]
    else:
        dayarr = [now.day,20,10,1]

    #判断是否闰年
    day2 = 0
    if (now.year%4 == 0 and now.year%100 != 0) or now.year%400 == 0:
        day2 = 29
    else:
        day2 = 28
          
    
    months=[[0,0],[31,20,10,1,],[day2,20,10,1],[31,20,10,1],[30,20,10,1],[31,20,10,1],[30,20,10,1],[31,20,10,1],[31,20,10,1],[30,20,10,1],[31,20,10,1],[30,20,10,1],[31,20,10,1]]

    mon=now.month
    searchDate=[]
    while (mon > 0):
        if (mon == now.month):
            tmp = dayarr
        else:
            tmp = months[mon]
        for d in range(0,len(tmp)-1):
            if d==0:
                enddate='%s/%s/%s' % (mon, tmp[d], now.year%2000)
            else:
                enddate='%s/%s/%s' % (mon, tmp[d]-1, now.year%2000)
            begdate='%s/%s/%s' % (mon, tmp[d+1], now.year%2000)
            val=[begdate,enddate]
            searchDate.append(val)
        mon=mon-1
    #print(searchDate)
    return searchDate


#登陆亚马逊
def loginAmazone(driver):
    driver.get("https://sellercentral.amazon.com")
    driver.find_element_by_id('ap_email').send_keys('xxxxx')
    driver.find_element_by_id('ap_password').send_keys('xxxxx')
    driver.find_element_by_name('signIn').submit()


#设置查询条件 ASIN 和 时间
def searchProcess(driver, asin, begdate,enddate):
    driver.get("https://sellercentral.amazon.com/gp/orders-v2/search/ref=ag_myosearch_apsearch_myo")
    driver.find_element_by_id('_myoSO_searchTypeSelect').send_keys('ASIN')
    driver.find_element_by_id('_myoSO_searchKeyword').send_keys(asin)

    driver.find_element_by_id('_myoSO_SearchOption_exactDates').click()
    driver.find_element_by_id('exactDateBegin').clear()
    driver.find_element_by_id('exactDateBegin').send_keys(begdate)
    driver.find_element_by_id('exactDateEnd').clear()
    driver.find_element_by_id('exactDateEnd').send_keys(enddate)

    driver.find_element_by_id('_myoSO_SearchButton').click()
    time.sleep(2)


#设置每页显示50个
def setpage50(driver):
    driver.find_element_by_xpath('//option [@value="50"]').click()  # click
    driver.find_element_by_xpath('//form [@οnsubmit="return MYO.LO.DoAjaxSearchCall( this );"]').submit()
    time.sleep(2)
    driver.find_element_by_id('_myoLO_saveDefaultSearchCheckBox').click()

#计算记录个数
def countPage(source):
    pattern='</strong> of <strong>'
    pos1=source.find(pattern)
    beg=pos1+len(pattern)
    pos2=source.find('</strong>',pos1+len(pattern))
    total=int(source[beg:pos2])

    page=total%50
    if page==0:
        page=total/50
    else:
        page=int(total/50)+1
    print("订单总数为:%s,共计%s页" % (total, page))
    return page

#翻页 jump to page
def jumppage(driver, page, custid):
    rc=False
    for index in range(1,page):
        print("正在查找第%s页" % index)
        elements = driver.find_elements_by_xpath('//input [@maxlength="7"]')
        elements[1].find_element_by_xpath('//input [@name="currentPage"]').send_keys(str(index))
        driver.find_element_by_id('_myoSO_GoToPageForm_1').submit()
        time.sleep(4)
        source=driver.page_source
        pos=source.find(custid)
        if pos != -1:
            print('终于找到了,查找记录如下:')
            print(source[pos-270:pos+24])
            rc=True
            break
    return rc

def searchBadReview(driver, asin, custid, searchDate):
    for i in range(0, len(searchDate)):
        tmpDate=searchDate[i]
        begdate=tmpDate[0]
        enddate=tmpDate[1]
        print('==============================================')
        print("开始找%s到%s的订单" %(begdate, enddate))
        searchProcess(driver, asin, begdate, enddate)
        setpage50(driver)
        source=driver.page_source
        page=countPage(source)
        rc = jumppage(driver, page, custid)
        if  rc == True:
            break
    

#主函数
def main():
    usage()

    #输入参数
    asin = input("请输入ASIN:")
    print("你输入的ASIN是: ", asin)
    custid = input("请输入Customer profile id:")
    print("你输入的内容是: ", custid)
    searchDate=genSearchDate()
    #print("查找时间范围如下:")
    #print(searchDate)

    #默认浏览器行为
    print('==============================================')
    print("开始打开浏览器,并登陆Amazone seller center")
    driver = webdriver.Chrome()
    loginAmazone(driver)
    time.sleep(1)
    searchBadReview(driver, asin, custid, searchDate)
    driver.quit()
    time.sleep(60)

if __name__ == "__main__":
    main()

  

  

转载于:https://www.cnblogs.com/Anker/p/6195172.html

相关文章:

  • lvm的创建,扩容,回缩
  • 阿里云云市场成API经济领跑者
  • 数据库笔记15:Date类
  • Linux 磁盘分区、格式化、目录挂载
  • truncate后恢复包---FY_Recover_Data.pck 包的内容
  • MVC分页
  • Java用webSocket实现tomcat的日志实时输出到web页面
  • 阻塞赋值与非阻塞赋值(verilog篇)
  • 《软件需求十步走》阅读笔记4
  • 【VBA编程】01.第一个VBA程序Hello world
  • Linux Runtime PM介绍【转】
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • c作业3
  • Day23_IO第五天
  • 安装eclipse,配置tomcat
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • HTTP 简介
  • JS笔记四:作用域、变量(函数)提升
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • node和express搭建代理服务器(源码)
  • vue学习系列(二)vue-cli
  • 半理解系列--Promise的进化史
  • 理解在java “”i=i++;”所发生的事情
  • 聊聊flink的TableFactory
  • 容器服务kubernetes弹性伸缩高级用法
  • 微信公众号开发小记——5.python微信红包
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 我是如何设计 Upload 上传组件的
  • 一道闭包题引发的思考
  • 2017年360最后一道编程题
  • MyCAT水平分库
  • ​ArcGIS Pro 如何批量删除字段
  • (Java)【深基9.例1】选举学生会
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (七)理解angular中的module和injector,即依赖注入
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (五)关系数据库标准语言SQL
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .Net Remoting常用部署结构
  • .Net中的设计模式——Factory Method模式
  • .sh
  • [ IO.File ] FileSystemWatcher
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [ 数据结构 - C++]红黑树RBTree
  • [145] 二叉树的后序遍历 js
  • [APUE]进程关系(下)
  • [BZOJ]4817: [Sdoi2017]树点涂色
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
  • [C# WPF] 如何给控件添加边框(Border)?
  • [Cocoa]iOS 开发者账户,联机调试,发布应用事宜