<h2>您可能遇到的问题:</h2>
<h2>1。同步问题</h2>
<p>对于大多数自动化任务,根据机器的处理能力和internet连接的强度,网页的加载时间会有所不同。你知道吗</p>
<p>为了解决这个问题,我们可以使用selenium的库导入等待。
下面是一个示例:</p>
<pre><code>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("http://somedomain/url_that_delays_loading")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
finally:
driver.quit()
</code></pre>
<h2>2。selenium配置文件中设置了错误的语言</h2>
<p>Selenium在大多数情况下都会在运行自动化脚本时使用您的语言环境,但是在您可能需要其他语言的情况下,这里是FireFox的示例代码。你知道吗</p>
<pre><code>from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
profile = webdriver.FirefoxProfile()
# switch out 'de' with another two character language code
profile.set_preference("intl.accept_languages",'de')
driver = webdriver.Firefox(firefox_profile=profile, executable_path='<insert_your_gecko_driver_path_here>')
driver.get("https://instagram.com/")
driver.close()
</code></pre>
<h2>三。工作代码(在Mojave 10.14.5上测试)</h2>
<p>这是您的代码和修改后的代码的区别:<a href="https://www.diffchecker.com/G0WWB4Ry" rel="nofollow noreferrer">https://www.diffchecker.com/G0WWB4Ry</a></p>
<ol>
<li>设置virtualenv</li>
<li>pip安装</li>
<li>下载geckodriver</li>
<li>在代码中设置gecko驱动程序的路径</li>
<li>使用成功结果运行脚本</li>
</ol>
<pre><code>from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# these two imports are for setting up firefox driver and options
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
# import these three lines below if you are having synchronization issues
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
profile = webdriver.FirefoxProfile()
# here is where you need to set your language explicitly if its defaulting to an undesired language
# just replace the second parameter with your 2 character language code
# this line is not needed if your desired language is locale
profile.set_preference("intl.accept_languages",'de')
# throw in your path here <insert_your_gecko_driver_path_here>
driver = webdriver.Firefox(firefox_profile=profile, executable_path='<insert_your_gecko_driver_path_here>')
driver.get("https://instagram.com/")
# added these two lines below to solve synchronization issue
# element wasnt clickable until page finished loading
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "Melde dich an.")))
#next command fails
driver.find_element_by_link_text("Melde dich an.").click()
#if the first command is skipped by entering in the url
#in driver.get(https://www.instagram.com/accounts/login/?source=auth_switcher)
#the following command fails as well.
driver.find_element_by_name("username").send_keys("HereIsTheUsername")
driver.find_element_by_name("password").send_keys("HereIsThePassword")
driver.find_element_by_name("password").send_keys(Keys.RETURN)
driver.close()
</code></pre>