【发布时间】:2019-07-10 05:29:39
【问题描述】:
无法点击该元素。代码没有让我看到异常跳转到除块。在除块中,流控制后的前 2 行也将用于 c in range(sheet.ncols): for r in range(sheet.nrows): 这里无法找到或单击 xpath。代码输出是 进程以退出代码 0 结束
from selenium import webdriver
import time
from selenium.common.exceptions import NoSuchElementException
import xlrd
driver = webdriver.Chrome(r'chromedriver.exe')
driver.maximize_window()
driver.get('url')
driver.switch_to.frame('m')
emailElem = driver.find_element_by_xpath('//*[@id="log_main"]/input')
# emailElem=browser.find_element_by_id('l')
# emailElem=browser.find_element_by_name("id")
emailElem.send_keys('sf@df.com')
# time.sleep(5)
passwordElem = driver.find_element_by_xpath('//*[@id="log_main"]/p[1]/input')
passwordElem.send_keys('#####')
passwd=passwordElem.find_element_by_xpath('//*[@id="log_main"]/p[2]/input').click()
driver.switch_to.parent_frame()
driver.switch_to.frame('topFrame')
driver.find_element_by_css_selector('.menu > ul:nth-child(1) > li:nth-child(7) > a:nth-child(1) > span:nth-child(1)').click()#Reports
driver.switch_to.parent_frame()
driver.switch_to.frame('ST_mainFrame')
driver.find_element_by_css_selector('div.menu_row:nth-child(16) > span:nth-child(3) > label:nth-child(2)').click() #FTO
driver.switch_to.frame('fto_details')
time.sleep(8)
driver.find_element_by_css_selector('html body table tbody tr td form table tbody tr td a img').click()#search
path = r'C:\Users\username\PycharmProjects\Python\WebScraping\Book2.xlsx'
workbook = xlrd.open_workbook(path)
sheet = workbook.sheet_by_index(0)
"""def check_exists_by_xpath(xpath):
try:
driver.find_element_by_xpath(xpath)
except NoSuchElementException:
return False
return True
"""
for c in range(sheet.ncols):
for r in range(sheet.nrows):
st = (sheet.cell_value(r, c))
try:
if st == float(st):
st_string = str(int(st))
xpath = "//input[@value='Analyze' and contains(@onclick,'" + st_string + "')]"
#cont = 0
if driver.find_elements_by_xpath(xpath):
driver.find_element_by_xpath(xpath).click() #Here new window will open
handles = driver.window_handles
h = len(handles)#h=2
#print(handles)
for handle in range(1,h):
#for handle in range(h):
driver.switch_to.window(handles[handle])
#driver.find_element_by_xpath('/html/body/table/tbody/tr[4]/td/table/tbody/tr[9]/td[3]/input').click()
driver.find_element_by_css_selector('.t2').click()
#time.sleep(2)
#driver.close()
lst_window = driver.window_handles
h2 = len(lst_window) #h2=2
def check_exists_by_xpath(xpath):
try:
driver.find_element_by_xpath(xpath)
except NoSuchElementException:
return False
return True
for lst_handle in range(2,h2):
#for lst_handle in range(1,h2):
driver.switch_to.window(lst_window[lst_handle])
xpath2 = "//*[@id='create_button']"
xpath3="//*[@id='update_button']"
#css2 = '#create_button'
#css3 = '#update_button'
if check_exists_by_xpath(xpath2):
driver.find_element_by_xpath(xpath2).click()
#driver.close()
elif check_exists_by_xpath(xpath3):
driver.find_element_by_xpath(xpath3).click()
#driver.close()
#if driver.find_element_by_css_selector(css2):
# driver.find_element_by_css_selector(css2).click()
#elif driver.find_element_by_css_selector(css3):
# driver.find_element_by_css_selector(css3).click()
#if driver.find_element_by_xpath(xpath2) or driver.find_element_by_xpath(xpath3):
# driver.find_element_by_xpath(xpath2 or xpath3).click()
# driver.close()
#elif driver.find_element_by_xpath(xpath3):
#driver.find_element_by_xpath(xpath3).click()
#driver.close()
#cont+=1
#print(cont)
#except ValueError:
except Exception:
if st == str(st):
xpath = "//input[@value='Analyze' and contains(@onclick,'" + st + "')]"
#cont1=0
if driver.find_elements_by_xpath(xpath):
driver.find_element_by_xpath(xpath).click() # Here new window will open
handles = driver.window_handles
h = len(handles) # h=2
# print(handles)
for handle in range(1, h):
# for handle in range(h):
driver.switch_to.window(handles[handle])
driver.find_element_by_xpath('/html/body/table/tbody/tr[4]/td/table/tbody/tr[9]/td[3]/input').click()
#time.sleep(5)
#driver.close()
lst_window = driver.window_handles
h2 = len(lst_window) # h2=2
def check_exists_by_xpath(xpath):
try:
driver.find_element_by_xpath(xpath)
except NoSuchElementException:
return False
return True
#for lst_handle in range(1, h2):
for lst_handle in range(2,h2):
driver.switch_to.window(lst_window[lst_handle])
xpath2 = "//*[@id='create_button']"
xpath3 = "//*[@id='update_button']"
if check_exists_by_xpath(xpath2):
driver.find_element_by_xpath(xpath2).click()
#driver.close()
elif check_exists_by_xpath(xpath3):
driver.find_element_by_xpath(xpath3).click()
#driver.close()
"""
if driver.find_element_by_xpath(xpath2):
driver.find_element_by_xpath(xpath2).click()
driver.close()
elif driver.find_element_by_xpath(xpath3):
driver.find_element_by_xpath(xpath3).click()
"""
我的代码有什么问题。 在excel中,我有n个值(行),只有第一个值代码才能成功执行。其余的值都在增加,但是
xpath = "//input[@value='Analyze' and contains(@onclick,'" + st_string + "')]"
#cont = 0
if driver.find_elements_by_xpath(xpath):
在这段代码之后,控件移回 Excel(for 循环),有时它会抛出 ValueError。
except Exception:
if st == str(st):
xpath = "//input[@value='Analyze' and contains(@onclick,'" + st + "')]"
#cont1=0
这里抛出异常为
Traceback (most recent call last): File "m.py", line 53, in <module> if st == float(st): ValueError: could not convert string to float: '23' During handling of the above exception, another exception occurred: Traceback (most recent call last):
谁能帮帮我,谢谢。
【问题讨论】:
-
你能上传你得到的错误的全文吗?我有点困惑到底是什么问题。另外,由于您的 xPath 有问题,您可以上传 HTML 或链接到 URL 吗?最后,
driver定义在哪里?例如,如果您使用的是 Chrome,您需要以这种方式定义驱动程序:driver = webdriver.Chrome(executable_path="/path/to/binary/chromedriver"); -
在第二次检查中,我对您要做什么感到困惑。你首先在哪里打开浏览器? Selenium 功能,例如通过 xPath 查找东西,需要打开一个 Web 浏览器,因为这是 selenium 唯一可以与之交互的东西。
-
在路径顶部有一些我无法分享的代码
-
无论如何,我认为如果没有完整的 HTML 或页面的 URL,就无法调试 xPath。最后,您能否粘贴您收到的错误的全文?
-
没有收到任何错误。进程以退出代码 0 结束
标签: python-3.x selenium selenium-webdriver