Lors du démarrage de la fonction
`find_element_by_* commands are deprecated`
J'obtiens des erreurs comme celles-ci:
<ipython-input-27-c5a7960e105f>:6: DeprecationWarning: executable_path has been deprecated, please pass in a Service object driver = webdriver.Chrome(executable_path=driver_path) <ipython-input-27-c5a7960e105f>:10: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead button = driver.find_element_by_class_name("quiz_button")
4 Réponses :
Ce message d'erreur ...
element = driver.find_element(By.XPATH, "element_xpath")
Utilisation class_name
:
element = driver.find_element(By.CSS_SELECTOR, "element_css_selector")
Dans des lignes similaires, vous devez également modifier ce qui suit:
Utilisation de id
:
element = driver.find_element(By.TAG_NAME, "element_tag_name")
Utilisation de nom
:
element = driver.find_element(By.PARTIAL_LINK_TEXT, "element_partial_link_text")
Utilisation link_text
:
element = driver.find_element(By.LINK_TEXT, "element_link_text")
Utilisation partial_link_text
:
element = driver.find_element(By.NAME, "element_name")
Utilisation tag_name
:
element = driver.find_element(By.ID, "element_id")
Utilisation de css_selector
:
button = driver.find_element(By.CLASS_NAME, "quiz_button")
Utilisation de xpath
:
from selenium.webdriver.common.by import By
Remarque: Si vous recherchez et remplacez pour implémenter les modifications ci-dessus, vous devrez faire la même chose pour find_elements _ *
, c'est-à-dire le pluriel Formulaires de find_element _ *
.
Vous pouvez également trouver ce guide de mise à niveau utile car il couvre d'autres modifications non liées que vous devrez peut-être apporter lors de la mise à niveau: https://www.selenium.dev/documentation/webdriver/getting_started/upgrade_to_selenium_4/ p> p>
NameError: le nom «par» n'est pas défini
de selenium.webdriver.common. par importation par
C'est génial, c'est beaucoup des commandes dans la récente syntaxe légèrement différente. Mais ce que je vois manquer, c'est le "Send_keys". Également sur le site Web de Selenium, ils n'ont pas encore d'exemple pour les "Send_keys" mais invitent à quiconque à apporter un exemple. selenium.dev/documentation/webdriver/actions_api/key/… A>, également si vous pouvez mettre un exemple Send_keys ici dans votre réponse. Actuellement, j'essaie l'exemple Send_keys avec Driver.Find_element (by.id, 'element_name'). Si vous pouvez y mettre cela, ce serait génial. Merci,
Qu'en est-il de ceci - emailaddress_input = driver.find_elements_by_xpath (x_path) [index], comment puis-je fournir l'index si je remplace find_elements_by_xpath avec find_element *.
@debanjanb a mentionné et expliqué la nouvelle structure, il vaut également mieux utiliser ces lignes:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.service import Service s = Service('C:/Users/.../chromedriver.exe') driver = webdriver.Chrome(service=s)
À quoi servent les touches
dans cet exemple?
@Arete, By et Key seront utilisés pour détecter les données cibles et entrées! , ces lignes sont la structure principale.
Comme d'autres l'ont mentionné, vous devez utiliser find_element ()
ou find_elements ()
au lieu de find_element_by _ * ()
ou find_elements_by_ * ()
.
J'ai écrit le modèle Regex pour remplacer les méthodes obsolètes à une nouvelle, alors essayez ceci si vous avez besoin.
from selenium.webdriver.common.by import By
Remarque: vous avez besoin la ligne d'importation pour utiliser les nouvelles méthodes
# from - e.g. find_element_by_id("test") find_element(s?)_by_([a-z]+)\((.*) # to - e.g. find_element(By.ID, "test") find_element$1(By.\U$2\E, $3
Voici un exemple qui clarifiera un peu les choses:
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By chrome_driver_path = "C:\Development\chromedriver_win32\chromedriver.exe" s = Service(chrome_driver_path) driver = webdriver.Chrome(service=s) driver.get('https://www.amazon.in/Apple-MacBook-Chip-13-inch-256GB/dp/B08N5VSQNG/') title = driver.find_element(by=By.ID, value="productTitle") # by=By.ID, By.TAG_NAME, By.CLASS_NAME, By.NAME print(title.text) # driver.close() # Closes the tab which was opened earlier driver.quit() # Quits the entire browser.
Essayez de vérifier celui-ci. Correspond à votre requête. stackoverflow.com/questions/61308799 /…