Dans l'URL ci-dessous, je dois cliquer sur une icône de messagerie hypertexte, parfois il ne fonctionne que même le code est correct, dans ce cas, le pilote doit attendre jusqu'à 10 secondes et passer au niveau suivant
https://www.sciencepeirect.com/science/article/pii/s1001841718305011 P> Comment utiliser explicitement ou implicitement attendre ici-- "Tag.click ()" P> P>
5 Réponses :
Utilisez la fonction intégrée.Sleep ()
non monsieur c'est en boucle, le pilote devrait attendre jusqu'à 10 secondes pour cliquer sur le lien, y compris la réussite ou omet de cliquer dessus devrait passer au niveau suivant, nous devons donc utiliser explicitement ou implicitement attendre ici, mais je ne sais pas comment à utiliser ici pour "tag.click ()"
Je suis désolé, je ne comprends pas ce que vous essayez de faire, pourriez-vous fournir une meilleure explication s'il vous plaît? Utilisation du temps.sleep (10) attendra 10 secondes avant de continuer à Tag.click (), n'est-ce pas ce que vous voulez?
S'il vous plaît définir "partir et aller au niveau suivant", voulez-vous continuer à continuer la boucle? En outre, qu'est-ce qui détermine combien de temps il devrait attendre.
Monsieur, il n'est pas nécessaire d'attendre exactement 10 secondes, il devrait attendre jusqu'à 10 secondes, s'il est fonctionné, cela passera au niveau suivant, sinon après 10 secondes, cela passera au niveau supérieur.
Il s'agit des résultats de recherche ScienceReect.com/.../a>
Ici, nous ne donnons que 10 secondes à chaque résultat de recherche si cela fonctionne, bien ça va revenir, sinon il devrait revenir après 10 secondes et aller au résultat suivant, c'est ce que je veux
Voici ce que vous voulez Stackoverflow.com / Questions / 21827874 / ...
Oui, comme si le délai d'attente n'est survenu: Imprimer 'Myfunc n'a pas exécuté complètement' Sinon: Imprimer 'MyFunc Terminé'
En tant que de côté .. Vous pouvez extraire les courriels de contact de l'auteur (qui sont identiques au clic) de Json comme chaîne dans l'un des scripts
import requests
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
}
data = requests.get('https://www.sciencedirect.com/sdfe/arp/pii/S1001841718305011/recommendations?creditCardPurchaseAllowed=true&preventTransactionalAccess=false&preventDocumentDelivery=true', headers = headers).json()
print(data)
monsieur c'est bien mais avec des mails, j'ai besoin d'un nom d'auteur, d'un titre d'article, d'un nom de journal, d'une année et d'un numéro d'émission dans une seule ligne, s'il y a 10 auteurs, je dois imprimer tous les détails ci-dessus, car j'ai écrit le code et tout est Allez bien, mais parfois, il ne faut pas exécuter Tag.click () dans le résultat de la recherche. Pour continuer la boucle quand il est échoué, il devrait revenir. Les résultats de la recherche sont ici ScienceReect.com/.../a>
Le nom de la revue est-il considéré comme des lettres chimiques chinoises? Et quel est le numéro de problème s'il vous plaît?
Pour une URL unique, il est correct, pour chaque mot clé, il y a environ 6 000 résultats à traiter, passez à travers ce lien " sciencedirect.com/... ", pour chaque lien que nous devons analyser et extraire à nouveau les détails nécessaires à ce sujet, est-ce que cela devient de nouveau travail?
Vous devez attendre que l'élément soit cliquable. Vous pouvez le faire avec webdiverwait code> fonction. 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
driver = webdriver.Firefox()
driver.get('url')
elements = driver.find_elements_by_xpath('xpath')
for element in elements:
try:
WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.LINK_TEXT, element.text)))
finally:
element.click()
Oui monsieur, mais comment appliquer WebDriver Waitez dans mon code, webDriver doit attendre 10 secondes jusqu'à ce que "Tag.click ()"
Par exemple, avec webDriverwait (pilote, 10). Jeuil (EC.Element_TO_BE_Clickable ((by.link_text, élément.text))) code>
Pourquoi essayer / enfin?
Si la fonction webDriverwait code> échoue à "Rechercher" l'élément que vous pouvez toujours essayer de cliquer dessus.
Vous pouvez essayer comme ci-dessous de cliquer sur les hyperliens contenant l'icône de courrier. Lorsqu'un clic est initié, une boîte de fenêtre contextuelle apparaît contenant des informations supplémentaires. Le script suivant peut aller chercher l'adresse e-mail de là. C'est toujours un grand problème de creuser quoi que ce soit lorsque sortie: p> svg code> est là. J'ai utilisé beauxoups code> bibliothèque pour l'utilisation de .extract () code> fonction pour lancer l'élément svg code> afin que le script puisse atteindre le script Contenu.
De ma compréhension, après que l'élément cliqué, il faut attendre que l'auteur Popup apparaisse puis extraire à l'aide de Détails () CODE>? tags = driver.find_elements_by_css_selector('svg.icon-envelope')
if tags:
for tag in tags:
tag.click()
# wait until author dialog/popup on the right appear
WebDriverWait(driver, 10).until(
lambda d: d.find_element_by_class_name('e-address') # selector for email
)
try:
details()
# close the popup
driver.find_element_by_css_selector('button.close-button').click()
except Exception as ex:
print(ex)
continue
Voulez-vous cliquer sur les deux liens avec les deux icônes de courrier adjacentes à ce double nom Weibingzhang, Junhongqian @scoop Realm?