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

使用Python Selenium调用类内方法及抓取站点数据返回空问题咨询

代码问题排查
  • 核心业务逻辑未执行
    你定义的Test1类是pytest框架的测试用例结构,直接运行当前脚本时这部分代码完全不会触发,实际生效的只有末尾的parse()函数:该函数仅用requests请求了站点首页,拿到的是未登录、未执行SMILES查询的初始静态HTML,自然找不到你需要的目标元素。
  • 静态请求无法获取动态内容
    你要定位的class="Antineoplastic"的a标签属于登录后提交查询才会异步渲染的动态内容,静态HTTP请求根本拿不到这部分数据,就算你给requests加了登录态,也需要单独抓查询接口的请求参数才能拿到返回结果,直接解析首页HTML不可行。
  • 缺少元素等待逻辑
    就算你正确触发了Selenium的执行流程,提交查询后结果需要加载时间,没有显式等待直接提取元素也会出现返回空的问题。

修复后的参考逻辑

直接调用Selenium执行全流程即可,不需要混用requests和pytest测试结构:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

def crawl_passonline(username, password, smi_value):
    driver = webdriver.Chrome()
    try:
        # 打开站点并登录
        driver.get("http://way2drug.com/passonline/")
        driver.set_window_size(1920, 1030)
        driver.find_element(By.CSS_SELECTOR, "#registration img").click()
        driver.find_element(By.NAME, "user_login").send_keys(username)
        driver.find_element(By.NAME, "user_password").send_keys(password)
        driver.find_element(By.ID, "register").click()
        # 等待登录完成跳转
        WebDriverWait(driver, 10).until(
            expected_conditions.element_to_be_clickable((By.ID, "myHeader1"))
        )
        # 提交SMILES查询
        driver.find_element(By.ID, "myHeader1").click()
        driver.find_element(By.ID, "smiles").click()
        smi_input = driver.find_element(By.ID, "smi")
        smi_input.clear()
        smi_input.send_keys(smi_value)
        driver.find_element(By.CSS_SELECTOR, "#myContent4 input:nth-child(4)").click()
        # 等待查询结果加载完成
        WebDriverWait(driver, 15).until(
            expected_conditions.presence_of_element_located((By.CSS_SELECTOR, "a.Antineoplastic"))
        )
        # 提取目标元素
        items = driver.find_elements(By.CSS_SELECTOR, "a.Antineoplastic")
        result = [item.text.strip() for item in items]
        print(result)
        return result
    finally:
        driver.quit()

if __name__ == "__main__":
    # 替换为你自己的账号密码
    crawl_passonline(
        "MY USER", 
        "MY PASS", 
        "CC1(C)C(O)CC[C@@]2(C)C1CC[C@]3(C)C2CCC4[C@@]3(C)CC[C@]5(C(O)=O)C4[C@H](C)C(C)=CC5"
    )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:24:03