selenium 无法使用方法定位元素:无法通过 id、css_selector、xpath、link 文本找到元素

selenium Unable to locate element using methods: cannot find elements by id, css_selector, xpath, link text

我正在尝试抓取 this 数据库中的数据。我之前确实问过类似的问题,但我现在的问题是 specific/I 我开始更了解这个问题了。

到目前为止,使用 selenium,我可以在 'search by plant-based food' 字段中输入 22663,然后单击下面的 'food-disease associations',然后单击提交,如下所示:

这是我遇到问题的下一页,我无法单击 'Plant-Disease Associations'。

我尝试了其他 SO 帖子中的许多想法:

import sys
import pandas as pd
from bs4 import BeautifulSoup
import selenium
from selenium import webdriver
from selenium.webdriver.support.ui import Select
import csv
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.by import By

#binary = FirefoxBinary('/Users/kela/Desktop/scripts/scraping/geckodriver')
url = 'http://147.8.185.62/services/NutriChem-2.0/'
driver = webdriver.Firefox(executable_path='/Users/kela/Desktop/scripts/scraping/geckodriver')
driver.get(url)

#input the tax ID
element = driver.find_element_by_id("input_food_name")
element.send_keys("22663")

#click food-disease association
element = Select(driver.find_element_by_css_selector('[name=food_search_section]'))
element.select_by_value('food_disease')

#click submit
submit_xpath = '/html/body/form/p[2]/input[1]'
destination_page_link = driver.find_element_by_xpath(submit_xpath)
destination_page_link.click()


# this is where it goes wrong
#click plant-disease associations
#table_data = driver.find_elements_by_xpath('//td[@class="likeabutton"]')
#driver.find_element_by_link_text("plant-disease").click()
#driver.find_element_by_link_text("nutrichem12587_disease.tsv").click()


 #driver.find_element_by_xpath("//div[contains(@onclick'nutrichem12587_disease.tsv']").click()

#values = []
#for i in table_data.find_element_by_tag_name('Plant-Disease associations'):
#    values.append(i.text)
#print(value)


#span = table_data.find_element_by_tag_name('Plant-Disease associations')
#print(span)

#select = Select(driver.find_element_by_xpath("/html/body/table/tbody/tr/td[3]"))
#select.click()
#submit_xpath = '/html/body/table/tbody/tr/td[3]/div/span'
#submit_xpath = '/html/body/table/tbody/tr/td[3]'
#destination_page_link = driver.find_element_by_xpath(submit_xpath)
#destination_page_link.click()

#element = driver.find_element_by_xpath("//select[@name='plant-disease']")
#element.select_by_value('Plant-Disease associations')


#xpath2 = '/html/body/table/tbody/tr/td[3]/div'
#destination_page_link = driver.find_element_by_xpath(xpath2)
#destination_page_link.click()

#xpath2 = '/html/body/table/tbody/tr/td[3]/div/span'
#destination_page_link = driver.find_element_by_xpath(xpath2)
#destination_page_link.click()

我已经注释掉了所有我试过但不起作用的行。您可以看到我已经按照不同 SO 帖子的建议尝试了多个选项,我知道那里有很多类似的问题,但是 none 的解决方案似乎对我有用;所有错误基本相同,'cannot find element'(例如selenium.common.exceptions.NoSuchElementException:消息:无法定位元素:nutrichem12587_disease.tsv)

有人可以帮我点击 'Plant-Disease association' 按钮吗?我在想,是不是因为我要点击的页面是 .php?

它在框架内。你需要切换到那个

driver.find_element_by_css_selector('[value="Submit"]').click()
driver.switch_to.frame(driver.find_element_by_css_selector('frame'))
driver.find_element_by_css_selector('[onclick*="plant-disease"]').click()