无法使用 selenium 和 Python 连接到网页
Cannot connect to webpage using selenium and Python
我正在尝试连接到特定网页,但它没有点击 Login
按钮:
browser.get('https://www.tsago.gr/eshop/account')
print('Browser Opened')
username = browser.find_element_by_id('email')
username.send_keys(email)
password = browser.find_element_by_id('password')
password.send_keys(pwd)
time.sleep(2)
sing_in = browser.find_element_by_xpath('//*[@class="btn btn-primary"]')
sing_in.click()
print('Login Clicked')
我已经尝试通过 css、名称等查找元素,但我不知道为什么不点击按钮以登录
html部分如下
<div class="span3 float-right" style="float:right;">
<button type="submit" class="btn btn-primary">Connect</button>
</div>
用户名和密码写的是正确的
以下 css 选择器应唯一标识您要查找的按钮:
driver.find_element_by_css_selector('div.span3.float-right > button')
这对我有用:
driver.find_element_by_css_selector('div.span3 > button[type="submit"]').click()
一般来说,您应该确保在编码之前识别出正确的元素。为此 - 使用 devTools(chrome/firefox 上的 f12),并在 'console' 选项卡
中 运行 您的查询
用于 xpath 识别 尝试 $x,即:$x('//button[@type="submit"]')
.
对于 css 选择器 使用 $$ 像这样:$$("div.someClass#someID")
您可以将鼠标悬停在结果上,找到的元素会突出显示
编辑:
我注意到你在使用 css 选项时遇到了问题,你也可以试试
driver.find_element_by_xpath('//div[contains(@class,"span3")]/button[contains(@class,"btn-primary")]")
看来你很接近。也许 Cookies 消息栏 是障碍,您可以 接受 cookies 或将 Connect 按钮滚动到查看,您可以使用以下解决方案:
代码块:
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
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_argument("--disable-extensions")
# options.add_argument('disable-infobars')
browser = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
browser.get('https://www.tsago.gr/eshop/account')
print('Browser Opened')
WebDriverWait(browser, 30).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input#email[name='email']"))).send_keys("Nikos")
browser.find_element_by_css_selector("input#password[name='password']").send_keys("Nikos")
browser.execute_script("window.scrollBy(0,250)", "");
browser.find_element_by_css_selector("div.control-group div.span3 button.btn.btn-primary").click()
print('Login Clicked')
控制台输出:
Browser Opened
Login Clicked
浏览器快照:
我正在尝试连接到特定网页,但它没有点击 Login
按钮:
browser.get('https://www.tsago.gr/eshop/account')
print('Browser Opened')
username = browser.find_element_by_id('email')
username.send_keys(email)
password = browser.find_element_by_id('password')
password.send_keys(pwd)
time.sleep(2)
sing_in = browser.find_element_by_xpath('//*[@class="btn btn-primary"]')
sing_in.click()
print('Login Clicked')
我已经尝试通过 css、名称等查找元素,但我不知道为什么不点击按钮以登录
html部分如下
<div class="span3 float-right" style="float:right;">
<button type="submit" class="btn btn-primary">Connect</button>
</div>
用户名和密码写的是正确的
以下 css 选择器应唯一标识您要查找的按钮:
driver.find_element_by_css_selector('div.span3.float-right > button')
这对我有用:
driver.find_element_by_css_selector('div.span3 > button[type="submit"]').click()
一般来说,您应该确保在编码之前识别出正确的元素。为此 - 使用 devTools(chrome/firefox 上的 f12),并在 'console' 选项卡
中 运行 您的查询用于 xpath 识别 尝试 $x,即:$x('//button[@type="submit"]')
.
对于 css 选择器 使用 $$ 像这样:$$("div.someClass#someID")
您可以将鼠标悬停在结果上,找到的元素会突出显示
编辑: 我注意到你在使用 css 选项时遇到了问题,你也可以试试
driver.find_element_by_xpath('//div[contains(@class,"span3")]/button[contains(@class,"btn-primary")]")
看来你很接近。也许 Cookies 消息栏 是障碍,您可以 接受 cookies 或将 Connect 按钮滚动到查看,您可以使用以下解决方案:
代码块:
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 options = webdriver.ChromeOptions() options.add_argument("start-maximized") options.add_argument("--disable-extensions") # options.add_argument('disable-infobars') browser = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe') browser.get('https://www.tsago.gr/eshop/account') print('Browser Opened') WebDriverWait(browser, 30).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input#email[name='email']"))).send_keys("Nikos") browser.find_element_by_css_selector("input#password[name='password']").send_keys("Nikos") browser.execute_script("window.scrollBy(0,250)", ""); browser.find_element_by_css_selector("div.control-group div.span3 button.btn.btn-primary").click() print('Login Clicked')
控制台输出:
Browser Opened Login Clicked
浏览器快照: