如何使用Selenium点击drugs.com的Check Interactions按钮
问题
在drugs.com查询两种药物(阿司匹林、Aleve)的相互作用时,已通过代码将药物名称填入搜索框,但多次尝试点击「Check Interactions」按钮以在新窗口查看结果均失败。
原实现代码
import requests from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # Launch the Chrome browser driver = webdriver.Chrome() # Navigate to the drugs.com drug interactions page driver.get("https://www.drugs.com/drug_interactions.html") WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#livesearch-interaction-basic"))).send_keys('aspirin' +Keys.RETURN) search_box = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#livesearch-interaction"))) search_box.clear() search_box.send_keys('Aleve') search_box.send_keys(Keys.RETURN)
问题分析与修正方案
原代码仅通过回车提交药物名称,未处理页面的自动补全选择逻辑,且缺少点击「Check Interactions」按钮及新窗口切换的步骤。以下是修正后的完整代码:
修正后代码
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 启动Chrome浏览器 driver = webdriver.Chrome() driver.maximize_window() # 打开药物相互作用查询页面 driver.get("https://www.drugs.com/drug_interactions.html") # 添加第一种药物:阿司匹林 first_search = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "input#livesearch-interaction-basic")) ) first_search.send_keys('aspirin') # 等待自动补全选项出现并选择第一个结果 WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, ".livesearch-row")) ).click() # 添加第二种药物:Aleve second_search = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "input#livesearch-interaction")) ) second_search.send_keys('Aleve') # 等待自动补全选项出现并选择第一个结果 WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, ".livesearch-row")) ).click() # 点击「Check Interactions」按钮 check_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "#content > div:nth-child(4) > div > div.section-interaction-search > div > div > button")) ) check_btn.click() # 切换到新打开的结果窗口 WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2)) windows = driver.window_handles driver.switch_to.window(windows[1]) # 后续可添加结果提取逻辑 # ... # 关闭浏览器 # driver.quit()
关键修正点
- 增加自动补全选项选择:避免直接回车导致药物未被系统正确识别
- 准确定位「Check Interactions」按钮:通过CSS选择器精准定位按钮元素
- 处理新窗口切换:等待新窗口打开后切换到该窗口进行后续操作
内容的提问来源于stack exchange,提问作者Abdelrhman Samir
相关产品推荐
相关产品推荐

