You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium sendkeys在Phytozome网站失效,手动输入正常的问题排查

解决Selenium sendkeys输入长序列到Phytozome BLAST时的报错问题

问题场景

在Phytozome的BLAST搜索页面,手动输入长氨基酸序列并选择Archaeplastida分类可正常返回100条结果,但使用ChromeDriver的Selenium调用sendkeys方法输入相同序列时,网站提示“The Phytozome service couldn't get what you were after.”,经确认仅sendkeys环节存在问题。

可行解决方案

1. 分段输入序列并添加延迟

长序列一次性sendkeys输入可能导致前端未完整接收,拆分序列逐段输入并添加短延迟模拟人类输入节奏:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("https://phytozome-next.jgi.doe.gov/blast-search")

# 替换为实际输入框的定位方式(如ID、XPath等)
sequence_input = driver.find_element(By.ID, "sequence")
long_sequence = "MARPFTLSLLSLCLLLSAWSCFGGSSSTNRFNICQLNSLNALKPDHRVETDGGLVETWSSRHPELECAGVTVTRRTLYRNGFQMPSYSPYSQMIMAIQGKGALGLALSGCAETYEEPAKESSSSSQKPSDSHQKIRQFDQGHVMLIPRGVPFWIFNTGDEPLITVTLLDTSSEDNQLDQSPREFYLAGNPDIEHPEAMKEKQQQQAEEEGGNVLSGFGKRFLARALNIDQDTANKLISPDDEMKQIVKLKEGLSVISPKWQGQQEDEDEDDDDEDEDESVSRPSRRPSHGKRVHKEEETVVEPYPHGKHVHKEVEKEVEPLPPRKHVHKEEEKEIEPLPPRRSRHHHDEGEDEGEEEEKPRARRTRGPTPSPKGEGHRGVEEEDESEDTKGHKTRHEKTRHEKSWKEHRPEGEDVEKGEAHEEWETRPSKDKPHGSNGLDETICSSKLQFNIARPKGADFYNPKAGRIKNLNSQSLPALQHFGLSAQYVVLYKNGIYSPHWNMDANSVIYVIRGQGQVRVVNNEGIVMFDDELKKGQLLVVPQNFMVAEEAGDQGFEYVVFKTNDNAVTSYLKETFRAFPAEVLVNIYKLKHSQVHDLKYNGNLGPLVNPENSLDQSS"

# 按每50字符拆分序列
chunk_size = 50
sequence_chunks = [long_sequence[i:i+chunk_size] for i in range(0, len(long_sequence), chunk_size)]

sequence_input.click()  # 先激活输入框
for chunk in sequence_chunks:
    sequence_input.send_keys(chunk)
    time.sleep(0.1)  # 每段输入后添加短延迟

2. 使用JavaScript直接设置输入框值

绕过sendkeys的模拟输入逻辑,通过JavaScript直接修改输入框的value属性,这种方式更适合超长文本,稳定性更高:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://phytozome-next.jgi.doe.gov/blast-search")

# 替换为实际输入框的定位方式
sequence_input = driver.find_element(By.ID, "sequence")
long_sequence = "MARPFTLSLLSLCLLLSAWSCFGGSSSTNRFNICQLNSLNALKPDHRVETDGGLVETWSSRHPELECAGVTVTRRTLYRNGFQMPSYSPYSQMIMAIQGKGALGLALSGCAETYEEPAKESSSSSQKPSDSHQKIRQFDQGHVMLIPRGVPFWIFNTGDEPLITVTLLDTSSEDNQLDQSPREFYLAGNPDIEHPEAMKEKQQQQAEEEGGNVLSGFGKRFLARALNIDQDTANKLISPDDEMKQIVKLKEGLSVISPKWQGQQEDEDEDDDDEDEDESVSRPSRRPSHGKRVHKEEETVVEPYPHGKHVHKEVEKEVEPLPPRKHVHKEEEKEIEPLPPRRSRHHHDEGEDEGEEEEKPRARRTRGPTPSPKGEGHRGVEEEDESEDTKGHKTRHEKTRHEKSWKEHRPEGEDVEKGEAHEEWETRPSKDKPHGSNGLDETICSSKLQFNIARPKGADFYNPKAGRIKNLNSQSLPALQHFGLSAQYVVLYKNGIYSPHWNMDANSVIYVIRGQGQVRVVNNEGIVMFDDELKKGQLLVVPQNFMVAEEAGDQGFEYVVFKTNDNAVTSYLKETFRAFPAEVLVNIYKLKHSQVHDLKYNGNLGPLVNPENSLDQSS"

# 执行JS代码设置输入框值
driver.execute_script("arguments[0].value = arguments[1];", sequence_input, long_sequence)

3. 添加模拟人类的前置操作

部分网站会检测自动化输入行为,可添加激活输入框、随机延迟等模拟人类操作的步骤:

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

driver = webdriver.Chrome()
driver.get("https://phytozome-next.jgi.doe.gov/blast-search")

# 等待输入框加载完成
sequence_input = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "sequence"))
)

sequence_input.click()
time.sleep(random.uniform(0.5, 1.5))  # 随机延迟模拟人类输入前的停顿
sequence_input.send_keys(long_sequence)

内容的提问来源于stack exchange,提问作者das420s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 00:24:17