使用Python Selenium操作DrugBank按钮无响应问题求助
问题排查:DrugBank药物交互检查页面按钮无反应
以下是用于自动检查药物交互的Python函数代码,但执行时输入药物后点击按钮无反应,自动化窗口手动点击按钮也无效,仅手动正常访问网站时操作正常:
def button_event(self): drug1 = self.entry1.get() drug2 = self.entry2.get() chrome_driver_path = "Chrome driver path " # Set Chrome options to run in headless mode chrome_options = Options() # Create a new Chrome browser instance with the headless option browser = webdriver.Chrome(executable_path=chrome_driver_path, options=chrome_options) # Load the web page browser.get('https://go.drugbank.com/drug-interaction-checker') # Find the form element by ID form = browser.find_element(By.CSS_SELECTOR,'form.name-search-form') # Find the input fields and fill them out name_input = form.find_element(By.CSS_SELECTOR,'input.select2-search__field') name_input.send_keys(drug1) time.sleep(2) name_input.send_keys(Keys.RETURN) name_input.send_keys(drug2) time.sleep(2) name_input.send_keys(Keys.RETURN) time.sleep(2) button = form.find_element(By.ID,"search") time.sleep(4) if button.is_enabled(): button.click() print("button is enabled") else : description = "Unfound medics in database" self.text1.delete("1.0","end") self.text1.insert("0.0", description) return wait = WebDriverWait(browser, 20) new_page_loaded = wait.until(EC.url_contains('drug-interaction-checker#results')) time.sleep(2) try: # Find the element browser.find_element(By.CSS_SELECTOR,"h2.no-results") description = "No interaction found" self.text1.delete("1.0","end") self.text1.insert("0.0", description) return except NoSuchElementException: print("results are there") # Find the interactions div and extract the description text interactions_div = browser.find_element(By.CSS_SELECTOR,'div.interactions-col.description') description = interactions_div.find_element(By.TAG_NAME,'p').text self.text1.delete("1.0","end") self.text1.insert("0.0", description)
可能的原因及解决方法
1. 无头浏览器被网站检测
很多网站会识别无头模式的Chrome并限制功能,导致按钮点击无效。
- 临时排查:注释掉无头模式相关配置,直接启动可视化Chrome测试是否正常。
- 修复方案:如果是无头模式的问题,添加模拟正常浏览器的参数:
chrome_options.add_argument("--headless=new") # 使用新版无头模式 chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") chrome_options.add_argument("--window-size=1920,1080") chrome_options.add_argument("--disable-blink-features=AutomationControlled") # 禁用自动化检测特征
2. 药物选择未正确完成
直接按回车可能没有选中下拉列表中的有效药物,导致网站未识别到合法输入,按钮点击无响应。
- 修复方案:输入药物后等待下拉选项出现,主动点击选中选项,而非直接回车:
# 输入第一个药物并选择下拉选项 name_input.send_keys(drug1) wait = WebDriverWait(browser, 10) # 等待高亮的选项出现并点击 drug_option = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".select2-results__option--highlighted"))) drug_option.click() # 重复上述步骤处理第二个药物 name_input = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,'input.select2-search__field'))) name_input.send_keys(drug2) drug_option2 = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".select2-results__option--highlighted"))) drug_option2.click()
3. 依赖固定sleep导致的时序问题
固定time.sleep()无法适配页面动态加载的速度,可能导致按钮还未处于真正可点击状态就执行点击操作。
- 修复方案:用显式等待代替固定sleep,等待按钮可点击后再执行点击:
# 替换原有的按钮查找和点击逻辑 button = wait.until(EC.element_to_be_clickable((By.ID, "search"))) button.click()
4. Chrome驱动与浏览器版本不兼容
ChromeDriver版本和本地Chrome浏览器版本不匹配会导致交互异常。
- 修复方案:查看Chrome浏览器版本(设置→关于Chrome),下载对应版本的ChromeDriver,替换代码中的
chrome_driver_path路径。
5. 页面元素定位偏差
虽然找到了按钮元素,但可能不是实际绑定点击事件的元素,或者表单存在嵌套层级问题。
- 修复方案:检查按钮的实际可点击区域,尝试用
ActionChains模拟点击:from selenium.webdriver.common.action_chains import ActionChains action = ActionChains(browser) action.move_to_element(button).click().perform()
内容的提问来源于stack exchange,提问作者AMINE BENALI
相关产品推荐
相关产品推荐

