使用 Splinter 在网站的文本区域中填写 table 或值列表

Fill a table or list of values in textarea in website using Splinter

我正在尝试编写一个脚本来自动搜索多个条目。这是输入:

<mirna-1>
<mirna-2>
<mirna-3>
    :    
    :   

网址是https://www.mirnet.ca/miRNet/faces/upload/MirUploadView.xhtml

如何将 mirna-1,.... 填入 miRNA 列表框。我做了以下尝试但失败了:

gecko = os.path.normpath('~/geckodriver')
nirnet_Results = []`
browser = Browser(executable_path=gecko)
browser.visit('https://www.mirnet.ca/miRNet/faces/home.xhtml')

# click miRNA_list
xpath = '//*[@id="j_idt39:j_idt55"]'
browser.find_by_xpath(xpath).click()
time.sleep(1)

#Select Human
xpath = '//*[@id="form:j_idt34"]/div[3]/span'
browser.find_by_xpath(xpath).click()
time.sleep(1)
xpath = '//*[@id="form:j_idt34_1"]'
browser.find_by_xpath(xpath).click()
time.sleep(1)

# select miRBase ID type
xpath = '//*[@id="form:j_idt38"]/div[3]/span'
browser.find_by_xpath(xpath).click()
time.sleep(1)
xpath = '//*[@id="form:j_idt38_1"]'
browser.find_by_xpath(xpath).click()
time.sleep(1)

# select Tissue type
xpath = '//*[@id="form:sourceOpt"]/div[3]/span'
browser.find_by_xpath(xpath).click()
time.sleep(1)
xpath = '//*[@id="form:sourceOpt_1"]'
browser.find_by_xpath(xpath).click()
time.sleep(1)

# select target type
xpath = '//*[@id="form:targetOpts"]/div[3]/span'
browser.find_by_xpath(xpath).click()
time.sleep(1)
xpath = '//*[@id="form:targetOpts_1"]'
browser.find_by_xpath(xpath).click()
time.sleep(1)

# Fill miRNA list
xpath = '//*[@id="form:listData"]'
browser.find_by_xpath(xpath).click()
time.sleep(1)
for mir in known_mir:
    browser.fill('form:listData',mir)
    browser.fill('form:listData','\n')

我成功地选择了开始下拉列表中的选项,当我尝试将名称列表粘贴到 miRNA 列表中时,我得到的所有名称都是这样的:

<mirna-1><mirna-2><mirna-3>....

而正确的格式是每个名字都应该在下一行。这该怎么做。请建议。谢谢。

虽然我会推荐 selenium 来做这样的事情,但你似乎想坚持使用 splinter。以下修复使用分裂。重现此问题时,每次 browser.fill() 为 运行 时,它都会替换已写入的文本。由于您没有在代码中包含 known_mir 的内容,因此我假设它是一个列表(如果我错了请纠正我)。我尝试将您想要放入表格的内容组合起来,但它奏效了。

替换:

for mir in known_mir:

    browser.fill('form:listData',mir)

    browser.fill('form:listData','\n')

与:

browser.fill('form:listData', '\n'.join(mir for mir in known_mir))

我的代码所做的就是组合 known_mir.

中的每个字符串

您可以使用 Selenium Chrome Driverpython 填写此表格。如果您以前没有使用过 selenium 并且想使用 selenium.However 这里是 selenium 的 official website .


为了install selenium 使用命令行

pip install -U selenium


你需要从以下网站website Chromedriver下载chrome基于compatibility的驱动程序,例如chrome browser支持chrome driver。总是喜欢chrome 驱动程序和 chrome 浏览器的最新版本。


这是填写表格的硒代码

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import time
driver=webdriver.Chrome('path to chrome driver exe')  #example : 'C:\chromedriver\chromedriver.exe'
driver.get("https://www.mirnet.ca/miRNet/faces/upload/MirUploadView.xhtml")

#select Organism here
WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.ID,"form:j_idt34_label"))).click()
time.sleep(2)
element=WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.XPATH,"//div[@class='ui-selectonemenu-items-wrapper']//ul[@id='form:j_idt34_items']//li[contains(.,'H. sapiens (human)')]")))
ActionChains(driver).move_to_element(element).send_keys(Keys.UP).send_keys(Keys.DOWN).send_keys(Keys.ENTER).perform()

#select ID type here
WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.ID,"form:j_idt38_label"))).click()
time.sleep(2)
element=WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.XPATH,"//div[@class='ui-selectonemenu-items-wrapper']//ul[@id='form:j_idt38_items']//li[contains(.,'miRBase ID')]")))
ActionChains(driver).move_to_element(element).send_keys(Keys.UP).send_keys(Keys.DOWN).send_keys(Keys.ENTER).perform()

#select Tissue here
WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.ID,"form:sourceOpt_label"))).click()
time.sleep(2)
element=WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.XPATH,"//div[@class='ui-selectonemenu-items-wrapper']//ul[@id='form:sourceOpt_items']//li[contains(.,'Exosomes [1250]')]")))
ActionChains(driver).move_to_element(element).send_keys(Keys.UP).send_keys(Keys.DOWN).send_keys(Keys.ENTER).perform()

#select Target type here

WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.ID,"form:targetOpts_label"))).click()
time.sleep(2)
element=WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.XPATH,"//div[@class='ui-selectonemenu-items-wrapper']//ul[@id='form:targetOpts_items']//li[contains(.,'Genes')]")))
ActionChains(driver).move_to_element(element).send_keys(Keys.UP).send_keys(Keys.DOWN).send_keys(Keys.ENTER).perform()


items=['mirna-1','mirna-2','mirna-3','mirna-4']
for item in items:
   element=WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//textarea[@id='form:listData']")))
   element.send_keys(item)
   element.send_keys(Keys.RETURN)

输出: