免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3227 | 回复: 7
打印 上一主题 下一主题

运行python 脚本报错 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2018-03-27 17:52 |只看该作者 |倒序浏览
新手刚接触python。 现在运行python 脚本报错, 请问如何定位或debug python 脚本在哪一步时候报错。 Message后面的信息是空的,很奇怪

  File "/usr/local/python3/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message:



[root@oc1575370235 bin]# /usr/bin/geckodriver -V
geckodriver 0.15.0


[root@oc1575370235 bin]# python3 -V
Python 3.6.1


Firefox version: ESR  52.4.0 (64-bit)  


[root@oc1575370235 firefox]# pip3 show selenium
Name: selenium
Version: 3.11.0
Summary: Python bindings for Selenium
Home-page: https://github.com/SeleniumHQ/selenium/
Author: UNKNOWN
Author-email: UNKNOWN
License: Apache 2.0
Location: /usr/local/python3/lib/python3.6/site-packages
Requires:




论坛徽章:
0
2 [报告]
发表于 2018-03-28 13:55 |只看该作者
看起来像是没得到页面的相应值,你把代码都贴上来看看

论坛徽章:
0
3 [报告]
发表于 2018-03-28 17:43 |只看该作者
总感觉 self.browser.implicitly_wait(60) 一直没起作用。 去掉注释time.sleep(10), 又可以往下跑

  File "sec.py", line 52, in __init__
    self.login()
  File "sec.py", line 68, in login
    self.apars()
  File "sec.py", line 87, in apars
    Select(self.browser.find_element_by_id('acct')).select_by_visible_text(self.account)
  File "/usr/local/python3/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 351, in find_element_by_id
    return self.find_element(by=By.ID, value=id_)
  File "/usr/local/python3/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 955, in find_element
    'value': value})['value']
  File "/usr/local/python3/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 312, in execute
    self.error_handler.check_response(response)
  File "/usr/local/python3/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="acct"]


    def login(self):

        try:
            id = self.wait.until(EC.presence_of_element_located((By.ID, 'loginName')))
            id.send_keys(self.username)
            password = self.wait.until(EC.presence_of_element_located((By.ID, 'password')))
            password.send_keys(self.pwd)
        except TimeoutError:
            auto_cirats()

        self.browser.implicitly_wait(60)
        submit = self.browser.find_element_by_name('button_okButton')
        submit.click()
#        time.sleep(10)
        self.apars()

    def apars(self):

        if self.inner_count >= 3:
            print('Retry to the limited times, quit.')
            self.browser.quit()
        else:
            self.inner_count += 1
            try:
#                apar_menu = self.wait.until(EC.presence_of_element_located((By.ID, 'ibm-primary-links')))
                self.browser.implicitly_wait(60)
                self.browser.find_element_by_xpath('//*[@id="ibm-primary-links"]/li[3]/a').click()
#                button = apar_menu.find_element_by_xpath('//*[@id="ibm-primary-links"]/li[3]/a')
#                button.click()
            except TimeoutError:
                self.apars()

            self.browser.implicitly_wait(60)
            Select(self.browser.find_element_by_id('acct')).select_by_visible_text(self.account)
            self.browser.find_element_by_xpath('//*[@id="MainForm"]/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[13]/td/div/div[2]/div/input[1]').click()
            self.browser.implicitly_wait(60)
            Select(self.browser.find_element_by_id('sortBy')).select_by_visible_text('Target implementation date')
            self.browser.find_element_by_xpath('//*[@id="MainForm"]/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[4]/td/table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr/td[2]/a').click()
#            self.browser.implicitly_wait(60)
#            self.browser.find_element_by_id('MainForm').find_element_by_name('go').click()
#            self.browser.implicitly_wait(60)
#            time.sleep(
            self.record_sort_out()

论坛徽章:
0
4 [报告]
发表于 2018-03-28 17:51 |只看该作者
本帖最后由 allenshen_99 于 2018-03-28 20:16 编辑

回复 2# dahe_1984

论坛徽章:
0
5 [报告]
发表于 2018-03-29 13:24 |只看该作者
报错说Message: Unable to locate element: [id="acct"]

你把这个@array=Select(self.browser.find_element_by_id('acct')),然后print(@array),看看下拉菜单中的值是否获取到了。

论坛徽章:
0
6 [报告]
发表于 2018-03-29 13:28 |只看该作者
我在py2.7中这样用的,2.7需要转码utf-8和gbk互相转换。

dropdown = Select(driver.find_element_by_tag_name("select")).options

for tmp in dropdown:
    select.select_by_visible_text(tmp.text.encode('utf-8'))

论坛徽章:
0
7 [报告]
发表于 2018-03-29 22:00 |只看该作者
回复 6# dahe_1984


我在有执行click()动作的行后注释掉self.browser.implicitly_wait(60) ,加上time.sleep() 就可以了。但是time.sleep()不智能等待 影响执行效率。self.browser.implicitly_wait(60) 是隐式智能等待为什么在这里没有起到相应作用?


    def login(self):

        try:
            id = self.wait.until(EC.presence_of_element_located((By.ID, 'loginName')))
            id.send_keys(self.username)
            password = self.wait.until(EC.presence_of_element_located((By.ID, 'password')))
            password.send_keys(self.pwd)
        except TimeoutError:
            auto_cirats()

        self.browser.implicitly_wait(60)
        submit = self.browser.find_element_by_name('button_okButton')
        submit.click()
        time.sleep(12)
        self.apars()

    def apars(self):

        if self.inner_count >= 3:
            print('Retry to the limited times, quit.')
            self.browser.quit()
        else:
            self.inner_count += 1
            try:
#                apar_menu = self.wait.until(EC.presence_of_element_located((By.ID, 'ibm-primary-links')))
                self.browser.implicitly_wait(60)
                patch_advisory = self.browser.find_element_by_xpath('//*[@id="ibm-primary-links"]/li[3]/a')
                patch_advisory.click()
#                button = apar_menu.find_element_by_xpath('//*[@id="ibm-primary-links"]/li[3]/a')
#                button.click()
            except TimeoutError:
                self.apars()

#            self.browser.implicitly_wait(60)
            Select(self.browser.find_element_by_id('acct')).select_by_visible_text(self.account)
            self.browser.find_element_by_xpath('//*[@id="MainForm"]/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[13]/td/div/div[2]/div/input[1]').click()
            time.sleep(7)
#            self.browser.implicitly_wait(60)
            Select(self.browser.find_element_by_id('sortBy')).select_by_visible_text('Target implementation date')
            self.browser.find_element_by_xpath('//*[@id="MainForm"]/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[4]/td/table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr/td[2]/a').click()
            self.browser.implicitly_wait(60)
#            self.browser.find_element_by_id('MainForm').find_element_by_name('go').click()
#            self.browser.implicitly_wait(60)
            time.sleep(9)
            self.record_sort_out()


论坛徽章:
0
8 [报告]
发表于 2018-03-30 07:59 |只看该作者
你说的self.browser.implicitly_wait(60)我没试过,

试试这个呢,self.browser..manage().timeouts().implicitlyWait(120, TimeUnit.SECONDS); 这个貌似等到timeout。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP