除非我先在浏览器中检查元素

时间:2017-10-25 18:38:42

标签: python selenium selenium-webdriver selenium-chromedriver

道歉,因为我是一个新生的编码员...... 尝试通过selenium / chromedriver自动执行任务(订单处理): 我遇到了一个问题。由于我不明白问题是什么,所以我很难解决问题。

我试图获取元素的文本,其中该元素是表的项。我确切知道该数据的位置,并相应地修改CSS选择器字符串以获取它。

我的代码或上游代码都没有抛出任何异常。

以下是有问题的代码:

            rscSelector = '#ctl00_ctl00_contentMainPlaceHolder_MainContent_dlRSCName > tbody > tr > ' \
                          'td:nth-child({}) > table > tbody > tr:nth-child(1) > td > ' \
                          'span'.format(str(count+1))   # This element is 1 indexed, why?  who knows
            element = chrome.find_element_by_css_selector(rscSelector)
            RSC = bD.RSCDict[element.text.strip()]

这是通过循环测试字段中的值,然后查找相应的元素来查找我想要的文本。 (两个单独的表格及相应的信息)

什么是扔我,是,前4次迭代,它工作,5及以上它无法得到文本。 (通过')

此外,如果我手动检查chrome中的元素,那么它可以工作......代码没有变化,运行时间相同吗?

完整的代码块:

def accept_order2(order_R, quantity, chrome, chromeHandleID, firefox, fFoxHandleID):
chrome.switch_to.window(chromeHandleID)
chrome.switch_to.frame(chrome.find_element_by_css_selector('#itemDetail'))
RSC = None
for count in range(numberOfRSCs):
    qtySelector = '#ctl00_ctl00_contentMainPlaceHolder_MainContent_rptCheckout_ctl00_' \
                  'datalstContainer_ctl{}_txtOrderQty'.format(str(count).rjust(2, '0'))  # pad string/0 indexed
    try:
        element = chrome.find_element_by_css_selector(str(qtySelector))
    except ElementNotVisibleException:
        print('Double check at least 1 field has data entered into it.')
        break
    fieldQuantity = element.get_attribute("value")

    if fieldQuantity != '' and fieldQuantity != ' ' and fieldQuantity is not None:
        if int(fieldQuantity) == quantity:
            rscSelector = '#ctl00_ctl00_contentMainPlaceHolder_MainContent_dlRSCName > tbody > tr > ' \
                          'td:nth-child({}) > table > tbody > tr:nth-child(1) > td > ' \
                          'span'.format(str(count+1))   # This element is 1 indexed, why?  who knows
            element = chrome.find_element_by_css_selector(rscSelector)
            RSC = bD.RSCDict[element.text.strip()]
            break
        else:
            raise ValueError('Origiinial Order Quantity and quantity supplied in field does not match')

这似乎是chromedriver中的一个错误,但是,我很清楚我没有足够的专业知识来做出这样的声明。

非常感谢任何帮助!!!

Christopher Lund

P.S。我无法控制我尝试使用的网页。我故意同时使用2个浏览器:firefox和Chrome。 Firefox代码并未显示简洁性,因为那里没有问题。

0 个答案:

没有答案