Селен - «Нет такого элемента» Исключение. Никакой iFrame и явный метод ожидания не могут решить проблему - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь найти элемент кнопки (кнопки «Загрузить» или «Сохранить выбранные коды серий») веб-страницы, но я не могу сделать это каким-либо другим способом. Веб-страница не имеет iFrame, явный метод ожидания не работает, и на самом деле, что еще хуже, когда я перебираю все классы веб-страницы, элемент не отображается, в то время как некоторые элементы, которые не отображаются в 'inspect elements' из chrome, do.

x = browser.find_elements_by_xpath('//*[@class]')
for y in x:
    print(y.get_attribute('class'))

Кроме того, еще одна неожиданная проблема заключается в следующем:

Элемент <div class="contentsInner">, который имеет следующие три дочерних элемента,

<div class="frameDecorationPlane clearfix">
<div class="abstractResultArea">
<div class="contentsBorder">

Может быть расположен с помощью селектора xpath или css, но оставшиеся два, за исключением первого дочернего элемента, вызывают ошибку отсутствия такого элемента.

Я включил скриншот веб-страница, на которую я ссылаюсь ниже, для справки.

Screenshot of the

Наконец, я включил ниже код, который использовал для перехода на страницу веб-сайта, которая вызывает ошибку. Чтобы повторить ошибку, вы можете использовать следующую ссылку , просто выбрать любой случайный элемент и любой диапазон выходного года и просто нажать кнопку «Поиск». Вам не обязательно выбирать конкретно данные, которые я выбрал для экспорта.

# We open a browser window.
browser = webdriver.Chrome(executable_path='/Users/George/chromedriver_80', chrome_options=chromeOptions)

# We load the website's query:
browser.get('http://www.stat-search.boj.or.jp/ssi/cgi-bin/famecgi2?cgi=$nme_a000_en&lstSelection=PR01')

# Finds and clicks the Corporate Goods Price Index (2015 base) element.
element = browser.find_element_by_css_selector('body > div.contents > div > ul.tabContent > li:nth-child(1) > div.searchCondition > div.nodeMenu > div.selectMenuItem > table > tbody > tr.selectedMenu > td.menuNameCell')
element.click()

# Finds and clicks the next button.
element = browser.find_element_by_css_selector('body > div.contents > div > ul.tabContent > li:nth-child(1) > div.searchCondition > div.nodeMenu > div.resultCountPanel.clearfix > input')
element.click()

# Finds and clicks the Producer Price Index element.
element = browser.find_element_by_css_selector('body > div.contents > div > ul.tabContent > li:nth-child(1) > div.searchCondition > div.nodeMenu > div.selectMenuItem > table > tbody > tr.selectedMenu > td.menuNameCell')
element.click()

# Finds and clicks the next button.
element = browser.find_element_by_css_selector('body > div.contents > div > ul.tabContent > li:nth-child(1) > div.searchCondition > div.nodeMenu > div.resultCountPanel.clearfix > input')
element.click()

# Finds and clicks the All commodities element.
element = browser.find_element_by_css_selector('body > div.contents > div > ul.tabContent > li:nth-child(1) > div.searchCondition > div.nodeMenu > div.selectMenuItem > table > tbody > tr.selectedMenu > td.menuNameCell')
element.click()

# Finds and clicks the next button.
element = browser.find_element_by_css_selector('body > div.contents > div > ul.tabContent > li:nth-child(1) > div.searchCondition > div.nodeMenu > div.resultCountPanel.clearfix > input')
element.click()

# Finds and ticks the PR01'PRCG15_2200000000 PPI indicator element.
element = browser.find_element_by_css_selector('#menuSearchDataCodeList > tbody > tr:nth-child(1) > td > label')
element.click()

# Finds and clicks the add to search condition button.
element = browser.find_element_by_css_selector('body > div.contents > div > ul.tabContent > li:nth-child(1) > div.searchCondition > div.leafMenu > div:nth-child(6) > a')
element.click()

# Types into the 'From YYYY' output range.
browser.find_element_by_css_selector('#fromYear').send_keys('1960') # The start year is '1960'.

# Finds and clicks the search button.
element = browser.find_element_by_css_selector('#resultArea > div.abstractionMenuArea.clearfix > div:nth-child(1) > a:nth-child(1)')
element.click()

После этого эта строка вызывает ошибку:

element = browser.find_element_by_xpath('/html/body/div[2]/div/div[2]/table/tbody/tr[2]/td[4]/a')

1 Ответ

0 голосов
/ 25 марта 2020

Пожалуйста, найдите ниже рабочий раствор. Вам нужно перейти на вкладку и затем щелкнуть этот элемент, чтобы загрузить свой отчет.

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import win32com.client as comclt
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as Wait

browser = webdriver.Chrome(executable_path=r"C:\New folder\chromedriver.exe")
browser.get('http://www.stat-search.boj.or.jp/ssi/cgi-bin/famecgi2?cgi=$nme_a000_en&lstSelection=PR01')

# Finds and clicks the Corporate Goods Price Index (2015 base) element.
element = browser.find_element_by_css_selector('body > div.contents > div > ul.tabContent > li:nth-child(1) > div.searchCondition > div.nodeMenu > div.selectMenuItem > table > tbody > tr.selectedMenu > td.menuNameCell')
element.click()

# Finds and clicks the next button.
element = browser.find_element_by_css_selector('body > div.contents > div > ul.tabContent > li:nth-child(1) > div.searchCondition > div.nodeMenu > div.resultCountPanel.clearfix > input')
element.click()

# Finds and clicks the Producer Price Index element.
element = browser.find_element_by_css_selector('body > div.contents > div > ul.tabContent > li:nth-child(1) > div.searchCondition > div.nodeMenu > div.selectMenuItem > table > tbody > tr.selectedMenu > td.menuNameCell')
element.click()

# Finds and clicks the next button.
element = browser.find_element_by_css_selector('body > div.contents > div > ul.tabContent > li:nth-child(1) > div.searchCondition > div.nodeMenu > div.resultCountPanel.clearfix > input')
element.click()

# Finds and clicks the All commodities element.
element = browser.find_element_by_css_selector('body > div.contents > div > ul.tabContent > li:nth-child(1) > div.searchCondition > div.nodeMenu > div.selectMenuItem > table > tbody > tr.selectedMenu > td.menuNameCell')
element.click()

# Finds and clicks the next button.
element = browser.find_element_by_css_selector('body > div.contents > div > ul.tabContent > li:nth-child(1) > div.searchCondition > div.nodeMenu > div.resultCountPanel.clearfix > input')
element.click()

# Finds and ticks the PR01'PRCG15_2200000000 PPI indicator element.
element = browser.find_element_by_css_selector('#menuSearchDataCodeList > tbody > tr:nth-child(1) > td > label')
element.click()

# Finds and clicks the add to search condition button.
element = browser.find_element_by_css_selector('body > div.contents > div > ul.tabContent > li:nth-child(1) > div.searchCondition > div.leafMenu > div:nth-child(6) > a')
element.click()

# Types into the 'From YYYY' output range.
browser.find_element_by_css_selector('#fromYear').send_keys('1960') # The start year is '1960'.

# Finds and clicks the search button.
element = browser.find_element_by_css_selector('#resultArea > div.abstractionMenuArea.clearfix > div:nth-child(1) > a:nth-child(1)')
element.click()

browser.switch_to.window(browser.window_handles[-1])
print browser.title
WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, "//a[@class='littlelargeButton largeButton-download']"))).click();

Вывод: Пожалуйста, найдите вывод ниже, как только вы нажмете на ссылку для скачивания

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...