python+seleium实现了一个小功能,记录几个小坑解决方法

环境信息:windows10,python3,chrome

1、seleium调用send_keys的时候会丢字符

丢字符:

pwd = '111111'
driver.find_element_by_id('password').send_keys(pwd)

修改为逐字传入:

pwd='111111'
for i in range(0, len(pwd)):
    driver.find_element_by_id('password').send_keys(pwd[i])

2、元素信息正确,但find不到元素

切换frame,当前页面只有一个frame,一开始没有考虑是frame的问题。但操作过程是由登录页跳转到了当前页,switch一下frame后正确找到了元素。切换frame前最好加个延时,以防找不到(未加延时84版本正常,62版本找不到frame)

time.sleep(2)
#driver.switch_to.frame(0) # 按照层级切换
driver.switch_to.frame('cntWin') # 按id切换

3、无法find隐藏元素,导致操作失败

先用js把隐藏元素设置为显示,再正常操作

js = "document.getElementsByClassName('classname')[0].style.display='inline'" #[0]因为我的元素的是个列表
driver.execute_script(js)

4、打包成exe

pip install pyinstaller

pyinstaller -F frozenOrgMember.py
生成的exe和对应执行机器chrome版本的chromedriver放到同级目录就可以在任意机器执行了

5、通过传参执行脚本

def test(argv):
    # 默认值,不传参时使用
    mobile = '18000000000'
    pwd = '111111'
    url = 'http://test.org'
    try:
        opts, args = getopt.getopt(argv, "hm:p:u:", ["mobile", "pwd", "url"])
    except getopt.GetoptError:
        print('test.py -m  -p  -u ')
        sys.exit(2)
    for opt, arg in opts:
        if opt == '-h':
            print('test.py -m  -p  -u ')
            sys.exit()
        elif opt in ("-m", "--mobile"):
            manager = arg
        elif opt in ("-p", "--pwd"):
            pwd = arg
        elif opt in ("-u", "--url"):
            url = arg

if __name__ == "__main__":
    test(sys.argv[1:])

 

你可能感兴趣的:(python,chrome,selenium)