硒单击href按钮

时间:2019-12-24 19:00:06

标签: python selenium web-crawler

我真的是硒新手。 目前,我正在尝试同时使用硒和beautifulsoup进行一些网络爬虫。我正在网上爬网的网站是Activity。 这是我现在拥有的代码。

BottomNavigationView

我试图在搜索时单击出现的第一个SNP ID。对我来说,单击搜索结果的href的好方法是什么?

5 个答案:

答案 0 :(得分:2)

在网页https://bigd.big.ac.cn/dogsdv2/pages/modules/indsnp/indsnp_search.jsp上以 P2RY12 搜索基因名称,然后点击出现的第一个 SNP ID 搜索您需要为element_to_be_clickable()引入 WebDriverWait ,您可以使用以下Locator Strategies

  • 代码块:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    
    driver.get('https://bigd.big.ac.cn/dogsdv2/pages/modules/indsnp/indsnp_search.jsp')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#idgname[name='searchForm.genename']"))).send_keys("P2RY12")
    driver.find_element_by_css_selector("button.button[type='submit']").click()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "form[action^='/dogsdv2/com/exportFile'] table>tbody>tr td:nth-child(3)>a"))).click()
    
  • 浏览器快照:

dogsearch

答案 1 :(得分:0)

在Chrome中,您可以按F12键。找到该元素,然后右键单击以复制此元素的xpath。 在此代码中,如果要单击第一个SNP ID,请添加此

firstID = driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/form/table/tbody/tr[1]/td[3]/a[1]");
firstID.click()

仅举一个例子。

答案 2 :(得分:0)

尝试一下:

firstsnpID = driver.find_element_by_xpath("(.//table[@class='table7 table7-border']/tbody/tr/td[3]/a)[1]")
firstsnpID.click()

您不能使用复合类通过find_element_by_class_name来定位元素

答案 3 :(得分:0)

要点击表格上的第一个链接,请诱导WebDriverWait()和element_to_be_clickable()以及随后的CSS选择器。

代码

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(executable_path=path_to_chromebrowser)
driver.get("https://bigd.big.ac.cn/dogsdv2/pages/modules/indsnp/indsnp_search.jsp")
input_area = driver.find_element_by_name("searchForm.genename")
input_area.send_keys("P2RY12")
searcher = driver.find_element_by_class_name("button")
searcher.click()
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"table.table7.table7-border td>a[href^='/dogsdv2/refsnp/showRefSNPDetail']"))).click()

要获取所有链接,引出WebDriverWait()和visibility_of_all_elements_located()并获取href值,然后迭代每个URL

allelemets=WebDriverWait(driver,10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,"table.table7.table7-border td>a[href^='/dogsdv2/refsnp/showRefSNPDetail']")))

allurls=[item.get_attribute('href') for item in allelemets]
print(allurls)
for link in allurls:
   driver.get(link)

答案 4 :(得分:0)

driver.find_element_by_xpath('/html/body/div/div[2]/div[2]/form/table/tbody/tr[1]/td[3]/a[1]').click()

如果您需要其他ID: for id in range(1,10): driver.find_element_by_xpath('/html/body/div/div[2]/div[2]/form/table/tbody/tr[{}]/td[3]/a[1]'.format(id)).click() sleep(5) driver.back()