python-3.x - 使用 Splinter 在网站的 textarea 中填充表格或值列表
问题描述
我正在尝试编写一个脚本来自动搜索多个条目。这是输入:
<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 Chrome Driver
您可以使用和填写此表格python
。如果您以前没有使用过 selenium 并且想使用 selenium。但是这里是 selenium 的官方网站。
硒install
使用命令行
pip install -U 硒
您需要从以下网站下载 chrome 驱动程序基于Chromedrivercompatibility
的,例如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)
输出:
推荐阅读
- arrays - 无法将文本文件转换为数组
- docker-compose - Composer 没有通过 dockerfile 安装 wordpress 插件
- javascript - 选择开始日期后自动更改结束日期
- prolog - 如何在序言中统一两个基本术语
- python-2.7 - 如何删除元素并更改python中的特定元素?
- typescript - `keyof` 使用泛型时报编译错误
- c# - 在当前上下文中找不到函数
- python-3.x - 如何将包含多个键值对的列拆分为pyspark中的不同列
- android - Mac 为 Android 构建 ffmpeg
- autodesk-forge - 具有多个应用程序的 Autodesk Forge Webhooks