脚本和使用 Selenium 手动执行指令之间的不同响应
Different responses between script and manual execution of instructions using Selenium
我希望 Selenium 显示具有最大行数的 table。这要归功于允许更改 table 中的行数的按钮。
我做了一个脚本:
url = 'http://www.side.developpement-durable.gouv.fr/EXPLOITATION/'
driver = webdriver.Chrome(executable_path=path_to_driver)
driver.maximize_window()
driver.get(url)
#I find the field where I want to execute my query
elem = driver.find_element_by_id("textfield")
#I write the text
elem.send_keys("photovoltaique")
#I send it
elem.send_keys(Keys.RETURN)
# I wait until ma page is loaded
WebDriverWait(driver, 15).until(EC.url_changes(url))
#I find the button to change my number of rows
elem = driver.find_elements_by_class_name("icon-arrow-bottom")
#I check the length of my object
print(len(elem))
#I click on the right button
elem[1].click()
此代码位于名为 change_rows(url)
的函数中。
当我执行脚本并调用函数时,这就是我收到的 return :
- 来自
print(len(elem))
: 1
当我手动执行指令时,我得到:
- 来自
print(len(elem))
: 5
我需要对象的第二个元素 elem
。
我尝试使用 Firefox 和 Chrome webdriver。
我更改了搜索结果的动态等待。它现在应该打印 5 个元素。
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
url = 'http://www.side.developpement-durable.gouv.fr/EXPLOITATION/'
driver = webdriver.Chrome(executable_path=<Your driver page>)
driver.maximize_window()
driver.get(url)
#I find the field where I want to execute my query
elem = driver.find_element_by_id("textfield")
#I write the text
elem.send_keys("photovoltaique")
#I send it
elem.send_keys(Keys.RETURN)
# I wait until ma page is loaded
WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.CLASS_NAME, 'taille_page')))
#I find the button to change my number of rows
elem = driver.find_elements_by_class_name("icon-arrow-bottom")
#I check the length of my object
print(len(elem))
#I click on the right button
elem[1].click()
如果您只想更改页面,请使用:
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
url = 'http://www.side.developpement-durable.gouv.fr/EXPLOITATION/'
driver = webdriver.Chrome(executable_path=<Your driver page>)
wait = WebDriverWait(driver, 20)
driver.maximize_window()
driver.get(url)
# Find the query field, write text and press Enter
driver.find_element_by_id("textfield").send_keys("photovoltaique", Keys.RETURN)
# Wait and click on
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".taille_page .icon-arrow-bottom "))).click()
# Click on the last one, 50 for this case
wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='taille_page']//li[last()]"))).click()
获取5个元素需要等待Javascript和jQuery加载完成:
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
url = 'http://www.side.developpement-durable.gouv.fr/EXPLOITATION/'
driver = webdriver.Chrome(executable_path=<Your driver page>)
wait = WebDriverWait(driver, 20)
driver.maximize_window()
driver.get(url)
# Find the query field, write text and press Enter
driver.find_element_by_id("textfield").send_keys("photovoltaique", Keys.RETURN)
# Wait for JavaScript and jQuery loading for completion
wait.until(lambda d: d.execute_script("return document.readyState === 'complete' && jQuery.active === 0;"))
# Wait for all elements to be visible
elem = wait.until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "icon-arrow-bottom")))
print(len(elem))
# Click on the right button
elem[1].click()
这里是更好的格式化、执行和安全检查代码:
#I write the text
textFieldEl = driver.find_element_by_id("textfield")
textFieldEl.send_keys("photovoltaique")
#Pressing search button
searchBtnEl = driver.find_element_by_id("submit-search")
searchBtnEl.click();
# I wait until results table is visible.
resultsEl = driver.find_elelement_by_id("resultats_recherche")
WebDriverWait(driver, 30).until(EC.visibility_of(resultsEl))
#I find the button to change my number of rows in header menu
headerPageSizeEl = driver.find_element_by_css_selector("#criteres_recherche + .navigation .pageSize-container span.icon-arrow-bottom")
headerPageSizeEl.click();
#note: adding wait for dropdown to be present.
# dropdown is now open and we will click 50 elements
showFiftyResultsEl = driver.find_element_by_xpath("//div[contains(@class, 'pageSize-container open')]//ul[@class='dropdown-menu']/li/a[text()='50']");
showFiftyResultsEl.click();
我希望 Selenium 显示具有最大行数的 table。这要归功于允许更改 table 中的行数的按钮。 我做了一个脚本:
url = 'http://www.side.developpement-durable.gouv.fr/EXPLOITATION/'
driver = webdriver.Chrome(executable_path=path_to_driver)
driver.maximize_window()
driver.get(url)
#I find the field where I want to execute my query
elem = driver.find_element_by_id("textfield")
#I write the text
elem.send_keys("photovoltaique")
#I send it
elem.send_keys(Keys.RETURN)
# I wait until ma page is loaded
WebDriverWait(driver, 15).until(EC.url_changes(url))
#I find the button to change my number of rows
elem = driver.find_elements_by_class_name("icon-arrow-bottom")
#I check the length of my object
print(len(elem))
#I click on the right button
elem[1].click()
此代码位于名为 change_rows(url)
的函数中。
当我执行脚本并调用函数时,这就是我收到的 return :
- 来自
print(len(elem))
: 1
当我手动执行指令时,我得到:
- 来自
print(len(elem))
: 5
我需要对象的第二个元素 elem
。
我尝试使用 Firefox 和 Chrome webdriver。
我更改了搜索结果的动态等待。它现在应该打印 5 个元素。
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
url = 'http://www.side.developpement-durable.gouv.fr/EXPLOITATION/'
driver = webdriver.Chrome(executable_path=<Your driver page>)
driver.maximize_window()
driver.get(url)
#I find the field where I want to execute my query
elem = driver.find_element_by_id("textfield")
#I write the text
elem.send_keys("photovoltaique")
#I send it
elem.send_keys(Keys.RETURN)
# I wait until ma page is loaded
WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.CLASS_NAME, 'taille_page')))
#I find the button to change my number of rows
elem = driver.find_elements_by_class_name("icon-arrow-bottom")
#I check the length of my object
print(len(elem))
#I click on the right button
elem[1].click()
如果您只想更改页面,请使用:
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
url = 'http://www.side.developpement-durable.gouv.fr/EXPLOITATION/'
driver = webdriver.Chrome(executable_path=<Your driver page>)
wait = WebDriverWait(driver, 20)
driver.maximize_window()
driver.get(url)
# Find the query field, write text and press Enter
driver.find_element_by_id("textfield").send_keys("photovoltaique", Keys.RETURN)
# Wait and click on
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".taille_page .icon-arrow-bottom "))).click()
# Click on the last one, 50 for this case
wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='taille_page']//li[last()]"))).click()
获取5个元素需要等待Javascript和jQuery加载完成:
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
url = 'http://www.side.developpement-durable.gouv.fr/EXPLOITATION/'
driver = webdriver.Chrome(executable_path=<Your driver page>)
wait = WebDriverWait(driver, 20)
driver.maximize_window()
driver.get(url)
# Find the query field, write text and press Enter
driver.find_element_by_id("textfield").send_keys("photovoltaique", Keys.RETURN)
# Wait for JavaScript and jQuery loading for completion
wait.until(lambda d: d.execute_script("return document.readyState === 'complete' && jQuery.active === 0;"))
# Wait for all elements to be visible
elem = wait.until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "icon-arrow-bottom")))
print(len(elem))
# Click on the right button
elem[1].click()
这里是更好的格式化、执行和安全检查代码:
#I write the text
textFieldEl = driver.find_element_by_id("textfield")
textFieldEl.send_keys("photovoltaique")
#Pressing search button
searchBtnEl = driver.find_element_by_id("submit-search")
searchBtnEl.click();
# I wait until results table is visible.
resultsEl = driver.find_elelement_by_id("resultats_recherche")
WebDriverWait(driver, 30).until(EC.visibility_of(resultsEl))
#I find the button to change my number of rows in header menu
headerPageSizeEl = driver.find_element_by_css_selector("#criteres_recherche + .navigation .pageSize-container span.icon-arrow-bottom")
headerPageSizeEl.click();
#note: adding wait for dropdown to be present.
# dropdown is now open and we will click 50 elements
showFiftyResultsEl = driver.find_element_by_xpath("//div[contains(@class, 'pageSize-container open')]//ul[@class='dropdown-menu']/li/a[text()='50']");
showFiftyResultsEl.click();